C 建構函式初始化順序

2021-07-29 14:52:53 字數 970 閱讀 1759

建構函式初始化按照如下順序進行

1. 首先構造虛擬基類,任何虛擬基類的建構函式按照它們被繼承的順序構造;

2. 其次構造非虛擬基類,任何非虛擬基類的建構函式按照它們被繼承的順序構造;

3. 接著構造成員物件,任何成員物件的建構函式按照它們宣告的順序呼叫;

4. 最後呼叫類自身的建構函式;

析構函式就無腦的將建構函式順序反轉即可。

接下來舉乙個簡單但是全面的例子幫助理解

#include using namespace std;

class obj1

~obj1()

};class obj2

~obj2()

~base()

};class base1 :public base

~base1()

};class derive

~derive()

};class derive1 :public base1

~derive1()

};int main()

輸出結果如下

base::base()

base1::base1()

derive::derive()

derive1::derive1()

derive1::~derive1()

derive::~derive()

base1::~base1()

base::~base()

在該例中,derivel1 繼承自base1,base1繼承自base,所以按照順序構造則是base,base1,然後構造derive1。而derive1有乙個成員物件derive,所以按照順序在呼叫derive1的建構函式前,需要構造derive(見開頭第3點)。

通過以上兩個例子,相信你一定對c++建構函式初始化順序有了一定的了解。(滑稽)

C 建構函式初始化順序

c 建構函式按下列順序被呼叫 1 任何虛擬基類的建構函式按照它們被繼承的順序構造 2 任何非虛擬基類的建構函式按照它們被繼承的順序構造 3 任何成員物件的建構函式按照它們宣告的順序呼叫 4 類自己的建構函式。include using namespace std class obj1 class o...

C 建構函式初始化順序

c 建構函式按下列順序被呼叫 1 任何虛擬基類的建構函式按照它們被繼承的順序構造 2 任何非虛擬基類的建構函式按照它們被繼承的順序構造 3 任何成員物件的建構函式按照它們宣告的順序呼叫 4 類自己的建構函式。include using namespace std class obj1 class o...

C 建構函式初始化順序詳解

1.建構函式 析構函式與拷貝建構函式介紹 建構函式 1.建構函式不能有返回值 2.預設建構函式時,系統將自動呼叫該預設建構函式初始化物件,預設建構函式會將所有資料成員都初始化為零或空 3.建立乙個物件時,系統自動呼叫建構函式 析構函式 1.析構函式沒有引數,也沒有返回值。不能過載,也就是說,乙個類中...