一、构造和析构
功能:
1.1 构造函数功能
构造函数在类实例化对象时用于完成对象成员的初始化,通常包括以下操作:
为成员变量分配内存空间
初始化成员变量
执行类似打开文件、分配资源等额外操作
1.2 析构函数
主要作用在于对象 销毁前 系统自动调用,执行一些清理工作
1.3 格式:
构造函数
类名(){}
1. 构造函数与类名同名。
2. 构造函数没有返回值,也不能写 void。
3. 构造函数通常设置为 public 权限,以便外部能够调用。
4. 构造函数可以有参数,因此==可以发生重载==
5. 序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次。
6. 如果不写构造函数,编译器会默认提供一个==构造函数==
析构函数
~类名(){}
1. 析构函数,没有返回值也不写 void。
2. 函数名称与类名相同,在名称前加上符号 ~ 。
3. 析构函数不可以有参数,因此不可以发生重载。
4. 程序在对象销毁前会自动调用析构,无须手动调,而且只会调用一次
1.4 调用时机
构造函数:在类实例化对象时==自动调用==,不需要也不允许手动调用。
析构函数:在==对象销毁==或者 ==程序结束前== 调用,不需要手动调。
注意 :
1、析构函数可以手动调用 但是一般不这么干
MyClass obj;
obj.~MyClass(); // 手动调用析构函数
2、析构函数在堆区 和 栈区的释放方式是不同的
栈区中 程序结束前 系统自动调用
堆区中 程序结束不会调用 需要用户手动调用 delete 才能调用堆区空间
1.5 构造和析构调用顺序
==面试题==
1、对于堆区对象:
先new那个对象 就先构造那个对象
先delete 那个对象 就先析构那个对象
所以一般不考虑 堆区的构造函数
2、对于栈区对象:
构造函数的调用顺序: 按顺序调用
析构函数的调用顺序:按逆序调用 // 先进 后出 先构造 后析构(栈的顺序)
1.6 栈区与堆区的对象创建:
栈区:
当在栈区创建对象时,构造函数会自动调用。
类名 对象名(构造函数的实参表); // 调用构造函数
堆区:
在堆区创建对象时,需要使用 new<

最低0.47元/天 解锁文章
905

被折叠的 条评论
为什么被折叠?



