看到網上一哥們的帖子 東西不多就**了1 #include 2
3using
namespace
std;45
class
element612
intelem;
13};
1415
class
arrayhelper
1622 arrayhelper(int
size) : val(size)
2326 arrayhelper(const arrayhelper &other)
2731
32 arrayhelper &operator=(const arrayhelper &other)
3339
public:40
intval;
41element s;
42};
43int
main()
44列印結果
element 1
cons 1
element 1
cons 2
element 1
cons 3
cons 4
12說明:
我們經常會弄混到底是類定義的物件先執行建構函式,還是類裡面的其它類物件先執行.弄不清這個問題是因為沒弄清引數列表.
我們知道下面的情況必須要用引數列表:
class a
;const int i;
int j;
}可以看到i的初始化工作是在引數列表中完成的,在建構函式的函式體(花括號內僅僅是賦值而已).那麼j呢,引數列表中沒寫j的話j的初始化工作在**完成? 答案是雖然沒寫但是j的初始化也是在初始化列表中完成的.
看下面的例子
class b
b(const b& t)
}class a
//type2
a(const b& t)
}當a用type1的建構函式的時候m_b.b等於幾? 當a用type2的建構函式的時候m_b.b等於幾?
type1下結果: 33type2下結果3 4
所以,不管有沒有引數列表,成員變數都是在引數列表中定義的.然後才會執行花括號內部的東西
C 建構函式的執行順序
類的大小 1 一般情況下,類的大小是類裡資料成員大小之和,普通函式不佔空間 2 static不佔空間大小 3 virtual虛函式,如果有虛函式,則多乙個vptr 虛指標 不管有多少虛函式,都只有乙個虛指標,指標佔4個位元組大小。4 空類佔乙個位元組大小。建構函式的執行順序 class test t...
C 建構函式問題
初始化列表 與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。class foo 初始化列表 private string name int id 從概念上來講,建構函式的執行可以分成兩個階段,初始化階段 和計算階段...
C 建構函式的繼承問題
一 基類沒有定義建構函式的情況 1 派生類也可以不定義建構函式,全部採用預設的建構函式,此時,派生類新增成員的初始化工作可以用其他公有函式來完成。2 如果只有派生類定義建構函式,只需要構造派生類物件即可,物件的基類部分使用預設建構函式來自動建立 二 基類中存在建構函式 1 基類中存在不帶引數的建構函...