成員初始化列表語法
阿新 • • 發佈:2018-12-08
一個類Classy,mem1,mem2,mem3都是這個類的資料成員,則類的建構函式可以使用以下的語法來初始化成員:
Classy::Classy(int n, int m) :mem1(n), mem2(m), mem3(m*n + 2)
{
//...
}
上述程式碼等效於初始化成員變數:mem1=n,mem2=m,mem3=m*n+2;
const物件或引用只能初始化但是不能賦值。建構函式的函式體內只能做賦值而不是初始化,因此初始化const物件或引用的唯一機會是建構函式函式體之前的初始化列表中。
從理論上說,這些初始化工作在建立物件是完成的,此時還沒執行括號中的任何程式碼,有幾點需要注意:
- 這個格式只能用於建構函式
- 必須使用這種格式來初始化非靜態const成員(c++11之前是這麼做的)
- 必須使用這種格式來初始化引用資料成員
- 資料成員被初始化的順序和他們在類中宣告的順序相同,和初始化器中的排列順序無關
成員初始化使用括號的方式也適用於常規初始化:
int i=100;
等效於
int i(100);
感覺初始化常規型別和初始化類物件一樣
派生類建構函式使用初始化列表:
derived::derived(int x,int y):based(x,y)
{
...
}