C++子類的建構函式後面加:冒號的作用
阿新 • • 發佈:2018-12-20
在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、相對於在建構函式中賦值,初始化列表執行效率更高。