1. 程式人生 > >C++子類的建構函式後面加:冒號的作用

C++子類的建構函式後面加:冒號的作用

在C++類的建構函式中經常會看到如下格式的寫法:

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

上述語句中單冒號(:)的作用是表示後面是初始化列表,一般有三種使用場景。

1、對父類進行初始化

呼叫格式為“子類建構函式 : 父類建構函式”,如下,其中QMainWindow是MyWindow的父類:

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

2、對類成員進行初始化

呼叫格式為“建構函式 : 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......
}

當然,上面建構函式的實現與下面的寫法等價

rectangle::rectangle(int pointX, int pointY, int Width, int Length)//原始檔中建構函式實現
{
    m_point.X = pointX;
    m_point.Y = pointY;
    m_Width   = Width;
    m_Length  = Length;
    todo......
}

3、對類的const成員變數進行初始化

由於const成員變數的值無法在建構函式內部初始化,因此只能在變數定義時賦值或使用初始化列表賦值。

對於2、3中的應用場景,有以下兩點說明:

1、建構函式列表初始化執行順序與成員變數在類中宣告順序相同,與初始化列表中語句書寫先後無關。

2、相對於在建構函式中賦值,初始化列表執行效率更高。