1. 默认构造函数
如果类没有构造函数,则编译器自动产生一个默认构造函数;
可以给类定义默认构造函数,即定义一个没有参数的构造函数;
如果类有参数非空的构造函数,则该类没有默认构造函数。
如果没有默认构造函数,则定义该类的数组会报错,如:C example[3];
2. 类成员构造函数和析构函数的顺序
构造函数:按基类到类自身构造函数的顺序
析构函数:相反。
3. 创建对象
创建对象必须同时创建父类及包含于其中的对象,创建顺序为:
(1) 执行基类的默认构造函数;
(2)类的非静态数据成员,按照声明的顺序创建;
(3)执行类的构造函数。
4. 成员初始化列表和构造函数体的区别
(1)对于内置数据类型
没有区别
(2)对于类类型
推荐使用成员初始化列表。
原因有二:
a. 必要性
如果有没有默认构造函数的类成员,或者const,引用成员等,必须使用初始化列表。
b.考虑效率
初始化列表效率更高,否则会先调用默认构造函数,再调用赋值操作符赋值。