行业知识
【C++】---命名空间,缺省参数,函数重载,内联函数等
2026-10-25 18:33:43
来源:互联网转载
C++入门
- 一、命名空间
- 1.命名空间(namespace)的定义
- (1)命名空间的格式:
- (2)命名空间可以嵌套
- (3)可以有多个命名空间
- 2.域 以及 编译器的搜索原则
- 3.namespace的三种使用方式
- 二、C++的输入与输出
- 注意:
- 三、缺省参数
- 1.缺省参数的定义
- 2.缺省参数的分类
- 四、函数重载
- 1.函数重载的概念
- 2.C++支持函数重载的原因
- 五、引用
- 1.引用的定义
- 2.引用的特性
- 3.使用场景
- (1)做参数
- (2)做返回值
- 1.传值返回
- 2.传引用返回
- 3.传值和传引用的区别
- 4.引用和指针
- 引用和指针的不同点
- 六、内联函数
- 1.内联函数的概念
- 2.特性
- 七、auto和 nullptr
- 1.关键字:auto
- 2.nullptr
一、命名空间
1.命名空间(namespace)的定义
在C/C++��,变量,函数以及后面C++要学的:类都是大量存在的,这些变量函数和类都存在于全局作用域中,这样可能会导致很多冲突,也就是命名冲突。使用命名空间的目的就是对这些标志符也就是变量函数等名称进行本地化,以此来避免命名冲突或名字污染。于是namespace关键字就应运而生来针对解决这种问题。
在定义一个新的命名空间的时候,使用关键字namespace加后面命名空间的名称,然后再接一对{}就可以了,{}里面就是命名空间的成员。
(1)命名空间的格式:
#define _CRT_SECURE_NO_WARNINGS 1 #include #include using namespace std;namespace N1{//命名空间的内容,既可以定义变量,也可以定义函数int a = 0;int ADD(int x, int y){return x + y;}}(2)命名空间可以嵌套
namespace N1{//命名空间的内容,既可以定义变量,也可以定义函数int a = 0;int ADD(int x, int y){return x + y;}//命名空间可以套命名空间namespace N2{int SUB(int a, int b){return a - b;}}}(3)可以有多个命名空间
一个程序中可以有多个命运空间不会冲突,当编译器运行时,会将两个命令空间的内容合并到一起。
注意:
- 在同一块命名空间中,不能有相同的变量和函数名。
- 一个新的命名空间定义了一块新的作用域,里面的所有内容都只局限于该命名空间。
- C++为了防止命名冲突,把自己库里面的所有东西都定义到std的命名空间中(std:C++标准库)
2.域 以及 编译器的搜索原则
对于全局域和局部域来说,他们不仅影响生命周期,还影响访问。
但是命名空间域只影响访问,最初的变量是什么,在namespace之后生命周期不变。
(::)域作用限定符,如果域作用限定符左边是空白,就默认是在全局域中进行搜索。
如果域作用限定符左边有指定域,那就只会在指定域进行搜索。
3.namespace的三种使用方式
(1)加命名空间名称及作用域限定符(N1::a),比较麻烦,每个用到域中成员的地方都得指定成员的域
(2)用using将命名空间成员或函数引入(using N1::a,访问a时就不需要加访问限定符"::")
(3)使用using namespace 命名空间名称引入(using namespace N1,访问a时就不需要加访问限定符"::")
二、C++的输入与输出
1.标准输出流:cout
标准输入流:cin
2.cout(流插入,可自动识别数据类型)
3.endl(相当于换行符:printf(“\n”))
4.对于浮点数的精度控制:
cout和cin不好写,所以在C++中写浮点数是就写:printf和scanf
注意:
- 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含头文件以及按命名空间使用方法使用std。
- cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含头文件中。
- 是流提取运算符
- C++的输入输出(cout,cin)可以自动识别变量类型
#include using namespace std;int main(){int a;double b;char c;cin >> a;cin >> b >> c;cout cout func();//该语句没有对函数进行传参,那么就用我的缺省参数a=0func(10);//该语句实参给形参传了,那么a==10return 0;}cout func();return 0;}cout func(0);return 0;}return a + b;}double ADD(double a, double b){return a + b;}//2.参数的个数不同void f(int a = 1){cout int a = 10;cout cout cout int a = 10;int& b = a;//b是a的引用(别名)a就是b,b就是a!!!//注意:引用类型必须和引用实体是同种类型的cout int a = 10;int& c;//错误,没有初始化!!!int& b = a;//b是a的引用(别名)a就是b,b就是a!!!return 0;}int a = 10;int& b = a;//b是a的引用(别名)a就是b,b就是a!!!int& c = a;int& d = a;return 0;}int a = 10;int c = 100;int& b = a;//b是a的引用(别名)a就是b,b就是a!!!int& b = c;// b已经作为a的引用,不能再作为c的引用了return 0;}int tmp=*left;*left=*right;*right=tmp;}int tmp=left;left=right;right=tmp;}int c = a + b;return c;} int main(){int ret = Add(1, 2); return 0;}int c = a + b;return c;} int main(){int& ret = Add(1, 2);Add(5, 7); cout int tmp = *a;*a = *b;*b = tmp;}int main(){int a = 10;int b = 100;cout int a = 10;double b = 100.19;auto c = b;//c和b一样是double类型的!!!cout cout cout f(NULL); f((int*)NULL); return 0;}
上一篇:hen复数英文怎么写?
下一篇:Error: JAVA