c++類的建構函式可以包含乙個建構函式初始化列表,如下
class b
private:
int num;
};
(1)建構函式分兩個階段執行,首先是初始化階段,然後是普通的計算階段,計算階段由建構函式函式體中的所有語句組成。不管成員是否在建構函式初始化列表中顯示初始化,類型別的資料成員總是在初始化階段。對於類型別資料成員,如果沒有在初始化列表中顯示指定初始化,則編譯器會隱式的呼叫該類型別資料成員的預設建構函式。
#include using
namespace std;
class a
;class b
private:
a a;
};int main()
執行結果如下:
[root@oneeight ~]# ./a.out
constructor
a
因為編譯器會隱式的呼叫類資料成員的預設建構函式,所以類資料成員必須要提供預設建構函式。
(2)一些成員必須在建構函式初始化列表中進行初始化,對於這樣的成員,在建構函式函式體中對它們賦值不起作用沒有預設建構函式的類型別的成員、const或引用型別的成員。
#include
using namespace std;
class a
private:
const
int num1;
int &num2;
};int main()
對於const資料成員或者引用型別資料成員,可以進行初始化,但是不能不能賦值,所以必須在初始化式中完成初始化。
(3)成員初始化的順序是定義成員的順序,與在初始化列表中指定的順序無關。
#include
using namespace std;
class b
private:
b b1;
b b2;
b b3;
};int main()
輸出如下:
[root@oneeight ~]# ./a.out
constructor b 2
constructor b 1
constructor b 3
C 建構函式 ,初始化列表
c 中的類的建構函式 1.如果類中沒有定義建構函式,編譯器將生成乙個預設建構函式,這個預設建構函式會呼叫類中所有成員的預設建構函式,但不會對如int,double的基本資料型別做初始化 2.類中可以定義多個建構函式,但每個建構函式應該有不同的引數實現 3.預設建構函式必須定義的情況,當需要定義乙個物...
C 建構函式初始化列表
從概念上講,可以認為建構函式分兩個階段進行 1.初始化階段 2.普通的計算階段。計算階段由建構函式函式體中的所有語句組成 不管成員是否在建構函式初始化列表中顯示初始化,類型別的資料成員總是在初始化階段初始化。初始化發生在計算階段的開始之前。建議 使用建構函式初始化列表 注 必須對任何const或引用...
C 建構函式初始化列表
建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化式。例如 example example ival 0 dval 0.0 ival 和dval是類的兩個資料成員 上面的例子和下面不用初始化列表的建構函式看似沒什麼區別 example exam...