1.命名空间
1.1发生命名冲突
1.2命名空间
1.2.1命名空间的定义
1.2.1命名空间的使用规则
2.C++的输入与输出
3.缺省参数
1.命名空间
1.1发生命名冲突
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。
在c中,同一个作用域下不可以定义同名的变量。rand 是产生随机数的函数,然而我们包括了它的头文件,然后我们还定义了一个全局变量rand他,显然会发生命名冲突。
所以c++就提供了解决办法。
1.2命名空间
下面这个想必大家在C++代码中常见的语句。
using namespace std;
namespace 是c++中的关键字,用于创建命名空间,它是用来避免命名冲突并组织代码的一种机制。通过命名空间,可以将一系列的变量、函数、类等内容封装在其中。
std 是所有C++库命名空间
1.2.1命名空间的定义
定义命名空间需要利用关键字namespace ,后面跟命名空间的名字,然后接一对{ }即可,{ }中即为命名空间的成员,命名空间中不仅可以定义变量还可以定义函数、类型。
1:正常命名空间的定义
2.命名空间可以嵌套使用
同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
1.2.2命名空间的使用规则
首先,大家先认识一个运算符双冒号::域作用限定符,其作用是通知编译器应从作用域限定符左侧的名字所示的作用域中寻找右侧的那个名字,即指定访问哪个名字空间的哪个成员。
其中b2就是命名空间,x就是该命名空间下的成员
命名空间的三种使用方法:
方法一:
加命名空间名称及作用限定符
int main() { printf("%d\n", N::a); return 0; }
方法二:
使用using将命名空间中的某个成员引入(指定命名空间)
using N::b; int main() { printf("%d\n", N::a); printf("%d\n", b); return 0; }
方法三:
使用using namespace +命名空间名称 引入(慎用)将命名空间全部展开
using namespce N; int main() { printf("%d\n", N::a); printf("%d\n", b); Add(10, 20); return 0; }
2.C++的输入与输出
1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件
以及按命名空间使用方法使用std。
2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<
iostream >头文件中。
3. <<是流插入运算符,>>是流提取运算符。
4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。
C++的输入输出可以自动识别变量类型。
5. 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识,
这些知识我们我们后续才会学习,所以我们这里只是简单学习他们的使用。后面我们还有有一个章节更深入的学习IO流用法及原理。
3.缺省参数
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。
运行结果:
缺省参数分为:半缺省和全缺省
全缺省:函数声明或定义中都指定默认值,不可跳转要依次传递
结果:
半缺省:缺省部分参数,缺省值必须从右往左依次给,这样传参就不存在歧义。
结果:
注意:
1. 半缺省参数必须从右往左依次来给出,不能间隔着给
2. 缺省参数不能在函数声明和定义中同时出现3. 缺省值必须是常量或者全局变量
4. C语言不支持(编译器不支持)
有错误和不足之处,欢迎各位大佬来指点。