C++入门基础(1)

因为6月中旬学校事情多,许久未更新,让我们继续学习吧!

目录

前言:

 一、命名空间:

 1、定义:

 2、使用:

 3、访问命名空间域:

二、C++输入、输出函数:

1、输入函数:

2、输出函数:

3、升级的地方:

 三、缺省参数:

定义:

使用: 

四、重载函数: 

 1、参数类型不同:

2、参数个数不同:

3、不同类型的参数的顺序不同 :

4、注意:

1.返回类型不同不是重载函数

2.带有缺省参数的重载函数有歧义:

五、总结

前言:

毕竟是想吃c++这一碗饭,当然得认识一下,我们C++的祖师爷——本贾尼

✨✨ 发展历史:

 一、命名空间:

        ✨在C/C++中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全 局作⽤域中,可能会导致很多冲突。使⽤命名空间的⽬的对标识符的名称进⾏本地化,以避免命名 冲突或名字污染namespace关键字的出现就是针对这种问题的。c语⾔项⽬类似下⾯程序这样的命名冲突是普遍存在的问题,而C++引入了namespace关键字就是为了更好的解决这个问题✨✨

 域: 全局域局部域 和 命名空间域

 1、定义:

        👉namespace的作用就是定义一个作用域出来,这个域跟全局域各⾃独⽴不同的域可以定义同名变量

 有点类似结构体关键字 域名 就是一个我们命名的空间,后面接一个 {} 里面相当于域内成员(命名空间成员)域名可以任取!!

注意3个点:✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 

  1. 在花括号结尾处不要加分号;
  2. 改命名域只能在全局的位置定义,不能写在局部;但是它可以再里面继续嵌套命名空间域;
  3. 域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响 编译查找逻辑,还会影响变量的声明周期,命名空间域和类域不影响变量声明周期。

✨ 项⽬⼯程中多⽂件中定义的同名namespace会认为是⼀个namespace,不会冲突。此时编译器报错,因为同一域下是不能出现同名变量的


 2、使用:

      👉  编译查找⼀个变量的声明/定义时,默认只会在局部或者全局查找,不会到命名空间⾥⾯去查找。所以 下⾯程序会编译报错。所以我们要使⽤命名空间中定义的变量/函数。🐸🐸

由于命名空间是一个域,想要在其外部使用其中一个变量等内容,就需要像结构体那样,需要一个操作符来调用它!!

域作用域限定符 ::    也就是2个冒号

当然了,也可以通过这个调用全局变量,当改限定符前面没有任何域名,即空的时候就是调用全局变量

 3、访问命名空间域:

分为3种方法:

1、直接单个进行访问(指定命名空间访问):就是前面提到的 域名::成员名 单独一个一个来进行访问,是最安全的的使用方法,项目中推荐这种方法

2、单个展开:using将命名空间中某个成员展开,项⽬中经常访问的,不存在冲突的成员推荐这种⽅式;展开后相当于给他放到全局了,不要去频繁使用    ::

 展开方式如下:using后面告诉它我们要展开谁

3、全展开:using将命名空间全部成员展开,项目不推荐,冲突危险大,但是日常练习推荐使用,方便;

展开方式如下:告诉的using的我们要展开的是一个 命名空间域


二、C++输入、输出函数:

在c语言中经常用到的输入输出语句,scanf,printf,当然,c++兼容大部分c的语法,所以也能用,在有些时候,用c++很麻烦的时候,可以用c的一些语法来替代;当然C++的输入输出也是有的:cin/cout

就像C语言有自己的标准输入输出的库一样,C++也有自己的库———->>   <iostream>

✨✨<iostream>是Input Output Stream 的缩写,是标准的输⼊、输出流库,定义了标准的输⼊、输 出对象✨这里说明一下:该库包含了stdio.h的内容,可以直接通过该库使用printf和scanf

声明一下: 

        👉C++标准库都放在⼀个叫std(standard)的命名空间中,所以要 通过命名空间的使⽤⽅式去⽤他们;

当我们要使用他们时就需要像调用域名的成员一样 std::成员名

但是一般我们平时写代码就是 用到了👉全展开


1、输入函数:

cin其实就是input前面2个单词然后前面加个c

使用输入函数需要用到一个 >> 流提起操作符

当然这里的提取也可以提取多个,但是需要注意的时该操作符只能对一个操作数,所以要这么写


2、输出函数:

cout就是output前面的3个单词前面加一个c

使用输出函数需要用到一个 << 流插入操作符

这里可以也是一样的一个操作符对应一个操作数,可以插入多个

✨和C语言一样,没有换行,需要我们自己取手动加一个

✨endl 这个是一个函数,相当于 \n的作用,这里刚刚学习,不要深究,这么理解即可

✨<<可以写字符串,也可以写字符,都行,但是注意>>只能对应一个操作数

3、升级的地方:

        ✨✨不需要像printf/scanf输⼊输出时那样,需要⼿动指定格式,C++的输⼊ 输出可以⾃动识别变量类型(本质是通过函数重载实现的,这个以后会讲到),其实最重要的是 C++的流能更好的⽀持⾃定义类型对象的输⼊输出。✨✨

值得注意的是没有了格式化,就无法控制数据的精度 

 但是C++兼容大部分C的语法,所以我们可以通过printf来控制其精度;


 三、缺省参数:

定义

缺省参数声明定义函数为函数的参数指定⼀个缺省值。👉在调⽤该函数时,如果没有指定实参则采⽤该形参的缺省值,否则使⽤指定的实参,缺省参数分为全缺省半缺省参数。(有些地⽅把缺省参数也叫默认参数)

 👉全缺省参数:全部参数都给一个缺省值

 半缺省参数:部分参数给定了一个缺省值;C++规定了,部分缺省参数必须从右向左缺省(从函数最右边参数开始缺省),不能跳跃缺省。

✨若不是从右向左,就会报错

使用: 

        ✨缺省参数的出现,让我们可以对于有缺省值的形参,能够不进行传参;而当我们不传参时,👉该形参就会使用自己的缺省值进行函数的实现✨

当然了,对于含有缺省参数的函数传参是,从左向右传实参的。我们发现:如果不给形参b传参,我们得到得a+b,就是传过去得实参a的值 + 形参中b的缺省值


四、重载函数: 

        ✨C++⽀持在同⼀作⽤域出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同。这样C++函数调⽤就表现出了多态⾏为,使⽤更灵活。反观:C语⾔是不⽀持同⼀作⽤域中出现同名函数的✨

👉在我们之前写加法函数时,C语言中,写了一个函数,就不能再出现重名了。为了方便,让一个函数名可以对多种类型数据进行加法,C++就允许了重载函数的出现🧑‍🎓

 1、参数类型不同:

✨ 传的参数类型不同,编译器会识别你的传参类型选择相匹配的那个函数;👉如下:

2、参数个数不同:

✨根据你传参的个数来判断使用哪一个函数🧑‍🎓

3、不同类型的参数的顺序不同 :

✨前提是里面必须是含有不同类型的参数才能有顺序不同的说法!!如果2个形参都是int 交换位置和不换位置都是一样的,这个就没有顺序不同之说✨

4、注意:

1.返回类型不同不是重载函数

✨看见红线了么,就是告诉你发生错误,不同的返回类型(返回值不同)编译器调用时,还是不知道调用谁。✨

2.带有缺省参数的重载函数有歧义:

✨这里不会报错,因为这个算的上时重载函数,但是值得注意的是,这是个有歧义的重载,编译器调用时会发生不知道调谁的情况,因为缺省参数也可以不传参,所以导致调用不传参的fcc()时,编译器不明白到底该调用哪个函数!🤔如果只调用fcc(a)就不会报错,那么这里用函数重载也没意义🧑‍🎓🧑‍🎓我们和计算机进行交流一定要明确清晰!!

👉👉不推荐缺省参数和重载函数一起使用!!!

五、总结:

暑假也要好好学习哦!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/787420.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【正点原子i.MX93开发板试用连载体验】项目计划和开箱体验

本文最早发表于电子发烧友&#xff1a;【   】【正点原子i.MX93开发板试用连载体验】基于深度学习的语音本地控制 - 正点原子学习小组 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com)https://bbs.elecfans.com/jishu_2438354_1_1.html 有一段时间没有参加电子发…

入门PHP就来我这(高级)19 ~ 捕获sql错误

有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 接着上篇我们来看下sql错误的捕获模式。 1 PDO中捕获SQL语句中的错误 在PDO中有3种方法可以捕…

【前端从入门到精通:第十二课: JS运算符及分支结构】

JavaScript运算符 算数运算符 关于自增自减运算 自增或者自减运算就是在本身的基础上进行1或者-1的操作 自增或者自减运算符可以在变量前也可以在变量后&#xff0c;但是意义不同 自增自减运算符如果在变量前&#xff0c;是先进行自增或者自减运算&#xff0c;在将变量给别人用…

Python | Leetcode Python题解之第221题最大正方形

题目&#xff1a; 题解&#xff1a; class Solution:def maximalSquare(self, matrix: List[List[str]]) -> int:if len(matrix) 0 or len(matrix[0]) 0:return 0maxSide 0rows, columns len(matrix), len(matrix[0])dp [[0] * columns for _ in range(rows)]for i in…

HumbleBundle7月虚幻捆绑包30件军事题材美术模型沙漠自然环境大逃杀模块化建筑可定制武器包二战现代坦克飞机道具丧尸士兵角色模型20240705

HumbleBundle7月虚幻捆绑包30件军事题材美术模型沙漠自然环境大逃杀模块化建筑可定制武器包二战现代坦克飞机道具丧尸士兵角色模型202407051607 这次HumbleBundle捆绑包是UE虚幻军事题材的&#xff0c;内容非常多。 有军事基地、赛博朋克街区、灌木丛景观环境等 HB捆绑包虚幻…

高,实在是高

go&#xff0c;去 //本义音通义通汉字“高”&#xff0c;指太阳升起、上升&#xff0c;即高上去 god | God&#xff0c;神&#xff0c;上帝 //本义音通义通“高的”&#xff0c;指太阳高高在上的&#xff0c;至高无上的 glad&#xff0c;高兴的 //本义音通义通“高了的”&#…

关于10G光模块中SR, LR, LRM, ER 和 ZR的区别?

在10Gbps&#xff08;10千兆比特每秒&#xff09;光模块中&#xff0c;SR、LR、LRM、ER 和 ZR 是用来描述不同类型的模块及其适用的传输距离和光纤类型。下面是这些缩写的详细解释&#xff1a; 1.SR (Short Range) 2.LR (Long Range) 3.LRM (Long Reach Multimode) 4.ER (E…

注解复习(java)

文章目录 注解内置注解**Deprecated**OverrideSuppressWarnings【不建议使用】Funcationallnterface 自定义注解元注解RetentionTargetDocumentedInherited 和 Repeatable 反射注解 前言&#xff1a;笔记基于动力节点 注解 注解可以标注在 类上&#xff0c;属性上&#xff0c…

鸿蒙语言基础类库:【@ohos.util.Deque (线性容器Deque)】

线性容器Deque 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 Deque&#xff08;double ended queue&#xff09;根据循环队列的数据结构实现&#xff0c;符合先进先出以及先进后出的特点&…

【Stable Diffusion】(基础篇三)—— 关键词和参数设置

提示词和文生图参数设置 本系列笔记主要参考B站nenly同学的视频教程&#xff0c;传送门&#xff1a;B站第一套系统的AI绘画课&#xff01;零基础学会Stable Diffusion&#xff0c;这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 本文主要讲…

深入理解 LXC (Linux Containers)

目录 引言LXC 的定义LXC 的架构LXC 的工作原理LXC 的应用场景LXC 在 CentOS 上的常见命令实验场景模拟总结 1. 引言 在现代 IT 基础设施中&#xff0c;容器技术已经成为一种重要的应用和部署方式。与虚拟机相比&#xff0c;容器具有更高的效率、更轻量的特性和更快的启动速度…

解答 | http和https的区别,谁更好用

TTP&#xff08;超文本传输协议&#xff09;和HTTPS&#xff08;安全超文本传输协议&#xff09;的主要区别在于安全性和数据传输的方式。 一、区别 1、协议安全性&#xff1a; HTTP&#xff1a;使用明文形式传输数据&#xff0c;不提供数据加密功能&#xff0c;数据在传输过…

用于视频生成的扩散模型

学习自https://lilianweng.github.io/posts/2024-04-12-diffusion-video/ 文章目录 3D UNet和DiTVDMImagen VideoSora 调整图像模型生成视频Make-A-Video&#xff08;对视频数据微调&#xff09;Tune-A-VideoGen-1视频 LDMSVD稳定视频扩散 免训练Text2Video-ZeroControlVideo 参…

利用 STM32 实现多协议物联网网关:Modbus/Zigbee 到以太网/Wi-Fi 的数据桥接

摘要: 随着物联网技术的飞速发展&#xff0c;不同通信协议之间的互联互通成为了构建智能化系统的一大挑战。本文将以实战项目为例&#xff0c;详细介绍如何利用 STM32 微控制器实现 Modbus/Zigbee 与以太网/Wi-Fi 之间的协议转换&#xff0c;从而打通传感器数据上传至服务器的“…

源码编译构建LAMP(企业网站架构部署与优化)

部署LAMP平台 LAMV架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词&#xff0c;具体包 括 Linux操作系统&#xff0c;Apache网站服务器、MySQL数据库服务器、P…

海南云亿商务咨询有限公司助力品牌快速崛起

在数字化浪潮的推动下&#xff0c;电商行业日新月异&#xff0c;短视频平台更是成为品牌宣传和销售的新宠。海南云亿商务咨询有限公司&#xff0c;作为抖音电商服务的领军者&#xff0c;凭借其专业的团队和丰富的经验&#xff0c;助力众多品牌在抖音平台上实现了快速增长。 一…

【INTEL(ALTERA)】为什么我使用 PIO 边缘捕获中断的 Nios® II 设计不能正常工作?

目录 说明 解决方法 说明 当用户选择了不正确的边缘捕获设置&#xff0c;从而阻止触发中断时&#xff0c;可能会出现此问题。 在 PIO&#xff08;并行 I/O&#xff09;英特尔 FPGA IP内核中&#xff0c;如果“启用单个位设置/清除”选项被关闭&#xff0c;则将任何值写入边…

【RIP实验-熟悉基础配置】

实验拓扑 实验要求 根据实验拓扑的IP地址分配&#xff0c;为所有设备配置对应的IP地址和环回地址。全网运行RIPv2&#xff0c;将R1、R2、R3和R4的物理端口、Loopback地址和10.1.00网段进行宣告。并在rip协议下配置路由自动汇总&#xff0c;观察R1/R2是否能够收到10.0.0.0的详细…

初识数组(二)

目录 1. 二维数组的初始化 1&#xff09; 不完全初始化 2&#xff09; 完全初始化 3&#xff09; 按照行初始化 4&#xff09; 初始化时省略行&#xff0c;但是不能省略列 2.二维数组的使用 1&#xff09; 二维数组的下标 2&#xff09;二维数组的输入和输出 3. 二维数…

学生管理系统 | python

1. 题目描述 ****************************** 欢迎使用学生管理系统 ****************************** 1. 添加学生 2. 查看学生列表 3. 查看学生信息 4. 删除学生 5. 退出系统 1 请输入学生姓名: zhangsan 请输入学生学号: 10010 请输入学生班级: 3 请输入学生成…