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、相對於在構造函數中賦值,初始化列表執行效率更高。

 

微信公衆號:Qt開發社區(期待您的關注,掃下方二維碼或搜索“Qt開發社區”或"Qtkfsq")

投 稿 郵 箱 :[email protected]

                                                            

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章