构造函数的初始化表

1. 如果类存在继承关系,那么派生类中必须在初始化列表中调用基类的构造函数;

class A
{…
    A(int x);        // A的构造函数
};    
class B : public A
{…
    B(int x, int y);    // B的构造函数
};

B::B(int x, int y): A(x)   // 在初始化表里调用A的构造函数
{
      …
}    

2. const数据成员必须在初始化列表中进行初始化。因为const常量是属于对象的常量,而不是整个类的常量,对于每个对象,常量的值是不同的,在初始化列表中进行初始化。

3. 类的数据成员初始化,分为对象成员,和一般数据成员。可以在初始化列表中进行,也可以在构造函数内部进行。对于对象成员,采用初始化列表会更方便,因为初始化列表中初始化对象成员,直接调用的是拷贝构造函数。如果在函数体内初始化对象成员,是需要先调用对象成员类的构造函数,再调用赋值运算符函数进行赋值。

class A
{…
    A(void);                // 无参数构造函数
    A(const A &other);        // 拷贝构造函数
    A & operate =( const A &other);    // 赋值函数
};

class B
{
public:
    B(const A &a);    // B的构造函数
private:    
    A  m_a;            // 成员对象
};

B构造函数方法一:
B::B(const A &a): m_a(a)    //调用的是拷贝构造函数初始化m_a        
{ 
   … 
}    
方法二:
B::B(const A &a)
{
m_a = a;//先调用A的构造函数,创建对象m_a,再调用A的赋值函数进行赋值
…
}
原文地址:https://www.cnblogs.com/beaglebone/p/5729563.html