【C++】构造-析构详解
(一)构造函数的用途
- 创建对象
- 初始化对象的属性
- 类型转换(只允许单个参数的构造函数)
explicit
加在构造函数前表示明确不允许隐式类型转换。
1 |
|
(二)构造函数的特点
- 构造函数是特有
公有
成员函数;(1%特殊情况:可以私有、保护
) - 构造函数无返回值类型(
实际上返回创建的对象
) - 程序运行,构造对象时,该对象所属类的构造函数
自动被调用
- 构造函数可以重载
- 构造函数可以在类中定义,类中声明,在类外定义
- 若没有给定构造函数,C++编译器添加缺省的构造函数
类名(void){}
- 只要定义一个构造函数,系统就不会生成缺省的构造函数。
- 缺省构造函数只能有一个
(三)构造函数的调用情况
(1)花括号式的初始化
1 |
|
这种初始化的方式,就是将类当作结构体使用。编译器会生成缺省的构造函数Person(void);
(2)圆括号的初始化
1 | class Person |
注意:
- 初始化列表只能在构造函数上使用。
Person p2();
被编译器编译成返回值为Person类型 函数名p2的函数声明;- 构造函数不能手动调用
(四)析构函数
由于析构函数比较简单,这里就简单介绍下:
用途:注销对象、系统自动回收对象占用的资源
基本语法:
1 | ~类名(){}; |
注意:
- 析构函数可手动调用
- 析构函数不能重载
- 析构函数没有参数
(四)理解构造、析构思想
生可带来,死不带去。这句话很有深意,并且构造创建对象,对象的析构的过程 和 人的出生和死亡的过程是如此相似。
举个例子:
- 生可带来:有人生下来就是富二代(生可带来),就像有参构造(通过实参,给构造的对象的属性进行改造),普通人生下来(调用无参构造,不会对对象的属性进行额外的修改);
- 死不带去:死亡的过程(对象的析构过程),不管是富人、穷人都会面临死亡(所有的对象最后都会使用同一个析构函数去析构自己)
注意:
- 构造函数不能手动调用(系统自动调用,就像人无法就决定自己的出生条件,not remake)
- 析构函数可以手动调用(就像人的死亡,可以主动选择死亡,对象的析构也是如此)
- 多个构造函数的意义:构造不同属性的对象(好比富人、穷人、普通人…)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 code-016!