Const增强
- const 修饰变量为只读,用户不能通过变量给空间赋值
- const 修饰变量 如果已常量初始化,变量不会立即开辟空间,而是放入符号常量表中
- 如果对 const 修饰的变量 取地址 系统会立即给num开辟空间
- 如果使用变量 初始化 const 修饰的变量会立即开辟空间,没有符号常量表
- 总结
- 无参的宏:无类型、在预处理阶段展开、没有作用域的限制不能成为类的一部分
- const 修饰的变量:有类型、编译器检查错误、有作用域的限制 能成为类的一部分
引用
- 引用的本质:就是给已有的“变量”,取别名
- 引用的定义方式(定义的时候),引用必须初始化
- & 和 别名 结合代表取别名
- 给谁取别名,就先定义谁
- 从上往下整体替换
- 引用作为函数的参数,函数内部可以通过引用对外部的变量进行读写
- 总结
- 实参:应用不需要取地址 指针变量需要取外部变量的地址
- 形参:引用是别名不占空间 但是指针变量需要占空间
- 函数内部:操作引用就是等价操作外部变量 但是*指针变量才等价外部变量
常引用
引用作为函数 返回类型
案例一
案例二 返回值作为引用 一般用于 链式 操作
函数重载
函数重载的概述
- 函数重载:同一作用域,函数名相同,参数顺序、类型、个数不同,就可以重载,但是函数的返回值类型不能作为重载条件
- 函数重载实现的原理:
不同的编译器可能会产生不同的内部名。
void func(){}
void func(int x){}
void func(int x,char y){}
以上三个函数在 linux 下生成的编译之后的函数名为:
_Z4funcv //v 代表 void,无参数
_Z4funci //i 代表参数为 int 类型
_Z4funcic //i 代表第一个参数为 int 类型,第二个参数为 char 类
构造函数
构造函数的概述
- 构造函数类 实例化对象 的时候自动调用
- 构造函数的本质功能就是初始化对象中的数据成员
构造函数的定义形式
- 构造函数名和类名称相同,没有返回值类型,连void都不可以,可以有参数,可以重载,权限为public
- 如果不提供任何构造函数编译器会为类提供一个默认的无参的空的构造函数
- 如果用户提供任何一个构造函数都会屏蔽默认无参的构造函数