c 建構函式誰先執行的問題

2022-04-20 09:11:28 字數 1160 閱讀 8604

看到網上一哥們的帖子   東西不多就**了

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下結果: 33

type2下結果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 基類中存在不帶引數的建構函...