出现原因

  • 成员类的初始化:如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员只有一个带参数的构造函数,没有默认构造函数。这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数。
  • Const成员的初始化:当类成员中含有一个Const对象时,或者是一个引用时,他们也必须要通过成员初始化列表进行初始化,因为这两种对象要在声明后马上初始化,而在构造函数中,做的是对他们的赋值,这样是不被允许的。

使用场景

对父类进行初始化

调用格式为“子类构造函数 : 父类构造函数”,如下,其中QMainWindow是MyWindow的父类:

MyWindow::MyWindow(QWidget* parent , Qt::WindowFlags flag) : QMainWindow(parent,flag)

对类成员进行初始化

调用格式为“构造函数 : A(初始值),B(初始值),C(初始值)……”,如下,其中A、B、C分别是类的成员变量:


class rectangle //头文件中类定义
{
public:
    rectangle( int pointX, int pointY, int Width, int Length );
private:
    CPoint m_point;
    int m_Width;
    int m_Length;
};
 
rectangle::rectangle(int pointX, int pointY, int Width, int Length) : m_point(pointX,pointY),m_Width(Width),m_Length(Length)//源文件中构造函数实现
{
    todo......
}

对类的const成员变量进行初始化

由于Const成员变量的值无法在构造函数内部初始化,因此只能在变量定义时赋值或使用初始化列表赋值。

注意

  • 构造函数列表初始化执行顺序与成员变量在类中声明顺序相同,与初始化列表中语句书写先后无关。
  • 相对于在构造函数中赋值,初始化列表执行效率更高。