因为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个点:✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
- 在花括号结尾处不要加分号;
- 改命名域只能在全局的位置定义,不能写在局部;但是它可以再里面继续嵌套命名空间域;
- 域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响 编译查找逻辑,还会影响变量的声明周期,命名空间域和类域不影响变量声明周期。
✨ 项⽬⼯程中多⽂件中定义的同名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)就不会报错,那么这里用函数重载也没意义🧑🎓🧑🎓我们和计算机进行交流一定要明确清晰!!
👉👉不推荐缺省参数和重载函数一起使用!!!
五、总结:
暑假也要好好学习哦!!