构造函数初始化式
构造函数分为初始化阶段、普通计算阶段,计算阶段由构造函数体中所有语句组成,初始化阶段发生在计算阶段之前
初始化阶段
// 构造函数初始化列表,m_nAge用参数nAge初始化,m_strName初始化为wangwu
Teacher::Teacher(const int nAge):m_nAge(nAge),m_strName("wangwu")
{}
如果没有给类成员提供初始化式,默认调用类成员默认构造函数,成员类没有默认构造会报错
初始化const数据成员和引用类型数据成员必须在初始化式中
总结
必须对没有构造函数或者const数据成员和引用类型数据成员使用初始化式
效率方面:没有初始化式的成员调用默认构造,计算阶段还要对它初始化和赋值
初始化次序
成员定义顺序,避免使用成员初始化成员
class Teacher
{
public:
int a;
in b;
Teacher(int c):a(c),b(c)
{}
}
默认构造函数
只有在类没有提供任何构造函数时,编译器才会提供默认构造函数
用户只要定义了任何构造函数,编译器不再生成默认构造
使用默认构造
Teacher my(); //error 编译器解释为:函数声明,不接受任何参数返回Teacher类型对象
禁止构造函数的隐式转换
todo:explicit关键字