1. 程式人生 > >成員初始化列表語法

成員初始化列表語法

一個類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)
{
	...
}