建構函式和變數初始化順序

2021-05-23 08:12:31 字數 680 閱讀 6265

class a

輸出:a()  //這一行和下一行是為了構造c類物件的基類b,而在構造基類b的時候需要先初始化b的成員變數a,因而呼叫了a的建構函式

b()

a() //這一行和下一行是c類物件在初始化成員變數b時,需要構造b,因此需要先初始化b的成員變數a,因而再次呼叫了a的建構函式

b()

a() //這一行是c類物件初始化成員變數a是,需要構造a

c() //構造完畢c類物件的基類b和自身成員變數a,b之後,呼叫自己的建構函式

~c() //析構次序和構造次序相反

~a()

~b()

~a()

~b()

~a()

大家可以驗證做一些測試,比如把b改為

class b

{ public:

b(){ cout<<"b()"《這樣輸出結果: 

b() 

b()

a()

c()

~c()

~a()

~b()

~b()

看到了吧,這樣c在構造基類物件b和初始化成員變數b的時候就不用再構造a,因此就去掉了a()。

總結:初始化乙個類物件的時候,首先構造這個類的基類,接著初始化這個類的成員變數,最後呼叫建構函式。自然,析構的順序和構造次序相反。

C 建構函式初始化變數的順序

在 c 中類的建構函式初始值列表 中提到,c 中類的建構函式初始值列表可以對類的成員進行初始化。但是需要注意的是,建構函式的初始化列表只是說明各變數的初始值,並沒有指定變數的初始化順序。其中,myclass類建構函式的初始化列表只是說明了變數i的初始值是1,變數j的初始值是i的值。但是並不一定是先初...

C 類建構函式初始化列表和初始化順序

建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化式。例如 class cexample 建構函式內部賦值 cexample 上面的例子中兩個建構函式的結果是一樣的。上面的建構函式 使用初始化列表的建構函式 顯式的初始化類的成員 而沒使用初始化...

建構函式初始化列表初始化成員變數的順序

include include include using namespace std class point point point point p intgetx intgety intmain 執行結果如下 可以看到m x m y按照我們預想的結果進行了初始化,輸出結果符合預期。接下來我們將私...