构造函数

构造函数初始化式

构造函数分为初始化阶段、普通计算阶段,计算阶段由构造函数体中所有语句组成,初始化阶段发生在计算阶段之前

初始化阶段

// 构造函数初始化列表,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关键字

posted @ 2019-08-14 23:29  熊云港  阅读(222)  评论(0编辑  收藏  举报