C++基础
一.namespace
namespace是c++中的一个关键字,在c++中,一个程序会包含很多个变量,类,函数,如果这些变量,类,函数的名称都存在于全局作用域中,可能会导致很多命名冲突,namespace就是为了解决这一问题的。
定义一个命名空间需要namespace关键字,在关键字后跟命名空间的名字,然后跟一组{},{}中可以定义,变量,函数,类型等等。
命名空间只能定义在全局中,他还可以嵌套定义,当一个程序中多文件中存在同一名称的命名空间,会认为他们是同一命名空间,不会产生冲突。
当编译一个程序时,查找一个变量的声明和定义时,默认只会在全局或局部查找,不会到命名空间查找。
所以我们使用命名空间的方法有3种
1.指定命名空间的使用,使用::访问命名空间中的 成员
2.使用using namespace 展开了命名空间的全部成员
在 using namespace std 后可以直接写cout << "hello" << endl;但不推荐在大型项目或者头文件中这样写,容易命名冲突。
3.使用using单独展开某个成员

这样只引入需要的名字,比 using namespace std; 更安全。
二.C++中的输入和输出
1.输出cout

输出:Hello world
2.输入cin

输入:18 输出:18
3.<< 和 >>
<< 是输出运算符
>> 是输入运算符
本质上是运算符重载
可以理解为
cout << 10;
是数据流向屏幕。
cin >> x;
是数据从键盘流入变量。
4.连续输出和输入
cout << "年龄:" << 18 << endl;
输出结果:年龄:18
int a, b;
cin >> a >> b;
输入: 10 20
结果:a=10,b=20
5.endl
endl是换行和强制刷新缓冲区。
cout << "hello\n";
只换行,这样写效率更高,大型程序更推荐\n。
三.缺省参数
1.缺省参数的定义
缺省参数分为全缺省和半缺省参数,缺省参数是函数在声明和定义时为函数的参数提供一个缺省值,通俗来说就是函数在被调用时如果没有提供指定参数就采用缺省值,如果提供了参数就采用提供的参数。

输出:10
20
2.全缺省参数
全缺省函数就是函数的所有参数全部使用缺省值,也就是默认值

输出:

3.半缺省参数数
只有部分参数采用默认值


输出:1 10
1 2
4. 缺省参数的规则
1. 默认参数必须从右往左连续给
正确:

错误:

中间必须连续赋值不能断开
2. 调用时从左向右传参




3.缺省参数一般写在函数声明中
正确:

错误:
四.函数重载
在同一个作用域中,允许多个函数名字相同,但参数不同。
编译器会根据你传入的参数:
- 参数个数
- 参数类型
- 参数顺序
自动选择对应的函数。
1.函数重载的条件
参数个数不同


输出:
一个参数
两个参数
参数类型不同




输出:
int
double
参数顺序不同

2.不能构成重载的情况
返回值不同不算重载


调用时编译器无法判断。
参数名不同也不算重载

2.函数重载的原理
C++编译器会根据参数生成不同函数名。

编译后可能变成:

五.引用
1.引⽤的概念和定义
数据类型 &引用名 = 变量名;

输出:10
10
相当于b就是a的别名
2.引用的特性
1.引用必须初始化

2.引用一旦绑定不能更改

这里不是更换绑定,而是把 b 的值赋给 a

输出:20
3.⼀个变量可以有多个引⽤
3.引用的使用场景
1. 作为函数参数
这是引用最重要的用途。
普通传值

调用后原值不会变。
因为是拷贝。
引用传参


交换成功
引用的好处:
不会拷贝数据
效率高
可以直接修改原数据
2.作为函数返回值

错误例子:

原因:
a 是局部变量
函数结束后被销毁
引用变成野引用
六.const引用
1.基本写法

不能通过 r 修改 a
2.const引用的作用
1. 接收常量
普通引用无法接收常量

但const引用可以

编译器会临时创建变量。
2. 减少拷贝
传值就会发生拷贝


这里会发生值拷贝,相当于

编译器会重新创建一个新的 string 对象,把 str 的内容复制给 s
拷贝的代价很大
对于int,char,double拷贝代价很小,但对于string,vector,类对象,大数组
内部可能有:动态内存,大量数据
拷贝时:
会重新申请内存
复制字符
所以会:浪费时间,浪费空间
引用在调用时并不会创建新的对象


s 只是 str 的别名,并不会创建新的 string 对象,
相当于s 直接引用 str。
七.引用与指针的区别
| 引用 | 指针 |
|---|---|
| 必须初始化 | 可以不初始化 |
| 不能改绑定 | 可以改指向 |
| 使用更方便 | 需要解引用 |
| 更安全 | 容易空指针 |
| 本质类似指针 | 真正的地址变量 |
更多推荐
所有评论(0)