1. 构造函数 1.1 构造函数长什么样子 (1) 函数名和类名相同 (2) 没有返回值 (3) 如果不写构造函数,任何类中都存在一个默认的构造函数 I 默认的构造函数是无参的 II 当我们自己写了构造
1. 构造函数1.1 构造函数长什么样子(1) 函数名和类名相同 (2) 没有返回值 (3) 如果不写构造函数,任何类中都存在一个默认的构造函数 I 默认的构造函数是无参的 II 当我们自己写了构造函数,默认的构造函数就不存在 (4) 构造函数在构造对象的时候调用 (5) delete可以用来删掉默认的函数 (6) 指定使用默认的无参构造函数,用default说明 (7) 允许构造函数调用另一个构造函数,只是要用初始化参数列表的写法 (8) 初始化参数列表 : 只有构造函数有 I 构造函数名(参数1,参数2,…):成员1(参数1),成员2(参数2),…{} II 避免形参名和数据成员名相同的导致问题 1.2 构造函数干嘛的(1) 构造函数用来构造对象 (2) 构造函数更多是用来初始化数据成员 1.3 思考(1)为什么不写构造函数可以构造对象? 是因为存在一个默认的无参构造函数,所以可以构造无参对象 (2) 构造函数重载为了什么? 为了构造不同长相的对象。
2. 析构函数2.1 析构函数长什么样子?(1) 无返回值 (2) 无参数 (3) 函数名: ~类名 (4) 不写的话会存在默认的析构函数 (5) 析构函数不需要自己 调用,对象死亡的之前会调用析构函数 2.2 析构函数用来干嘛?(什么时候需要自己手动写析构函数)(1) 当类中的数据成员是指针,并且动态申请内存就需要手写析构 (2) 析构函数用来释放数据成员申请动态内存 3. 拷贝构造函数-> 拷贝构造函数也是构造函数,长相和构造函数一样的,只是参数是固定 .拷贝构造函数唯一的参数是对对象引用 -> 不写拷贝构造函数,也存在一个默认的拷贝构造函数 -> 拷贝构造函数作用: 通过一个对象去初始化另一个对象 问题I 什么时候调用拷贝构造? 答:当通过一个对象去创建出来另一个新的对象时候需要调用拷贝 II 拷贝构造什么时候需要加const修饰参数? 答:当存在匿名对象赋值操作的时候,必须要const修饰
4. 深浅拷贝(1)浅拷贝: 默认的拷贝构造叫做浅拷贝(2)深拷贝: 拷贝构造函数中做了new内存操作,并且做拷贝赋值的操作
5. 构造和析构顺序问题(1)普通对象,构造顺序和析构顺序是相反 (2)new出来的对象,delete会直接调用析构函数 (3)static对象,当程序关闭的时候,生命周期才结束,所以是最后释放
6. C++结构体
答疑:
|
2022-05-14
2021-11-29
2022-04-04
2022-06-24
2021-11-25