每个类分别定义了他的对象被初始化的方式,这些控制其对象初始化的成员函数就叫构造函数。
和其他函数的区别是:1、构造函数没有返回值。2、不能被声明成const,因为创建一个const对象时,知道构造函数完成初始化的过程,对象才能真正取得其“const“属性,所以构造函数在const对象的构造过程中是可以向其写值的。
当一个类没有定义构造函数的时候,编译器会隐式的合成一个构造函数,称为“合成的默认构造函数”。初始化顺序是先用类内的初始值初始化他,没有初始值的话执行默认初始化。注意只有在没有定义任何构造函数的情况下,才会有合成的默认构造函数。比如
class TT { int tmp; public: TT (int i) { tmp = i; } }; TT *tre1 = new TT(1);//OK TT *tre2 = new TT();//没有匹配的构造函数
有三种情况不能依赖合成的构造函数:
第一种如上所述。
第二种是定义在类内的某些成员执行默认初始化后会得到未定义的值,比如指针,数组什么的。
第三种就是有些类无法合成默认的构造函数,比如类中的某个成员没有默认构造函数。
所以我们需要自己定义默认构造函数。在C++11中可以使用 “=default"表示默认行为,在类内加入如下代码即可:
TT() = default;
当然也可以在类内声明,类外定义default,区别就是在类定定义默认是inline的,而类外定义默认不是inline。
时间: 2024-11-09 06:09:36