default constructor 的建構函式

2021-08-27 16:48:26 字數 993 閱讀 8456

裡總結了如下四種情況:

1.如果類內部有成員物件,並且成員物件帶有預設建構函式,那麼編譯器有必要為

這個類合成預設建構函式,以初始化這些成員物件。並且成員物件初始化的順序是按他們在類中宣告的順序。 例:

class blackball 

};class redball

};class whiteball {};

class container ;

編譯器為container類合成的預設建構函式可能像下面這個樣子:

container::container()

2. 如果乙個沒有任何constructor的類派生自乙個帶有defaultconstructor基類,那麼編譯器需要為這個

類合成乙個default constructor,在這個defaultconstructor中呼叫基類的default construct。

如果乙個類有各種constructor,但其中沒有defaultconstructor,那麼編譯器會擴充套件每個constructor,

在每個constructor的開頭插入呼叫基類的defaultconstructor的**。

3. 如果類宣告或繼承了乙個虛函式,那麼編譯器需要為這個類合成乙個defaultconstructor

(如果已經存在constructor,就會擴充套件這個建構函式),以初始化編譯器安插在這個類中的指向vtable的指標。

例:

class withvf  }

編譯器合成的default constructor可能像下面這個樣子:

withvf::withvf()

4. 如果乙個類虛繼承了乙個基類,那麼編譯器需要為這個類合成乙個defaultconstructor

(如果已經存在constructor,就會擴充套件這個建構函式),以初始化編譯器安插在這個類中的指向virtualbase class的指標。

default constructor 的建構函式

裡總結了如下四種情況 1.如果類內部有成員物件,並且成員物件帶有預設建構函式,那麼編譯器有必要為 這個類合成預設建構函式,以初始化這些成員物件。並且成員物件初始化的順序是按他們在類中宣告的順序。例 class blackball class redball class whiteball class...

Default Constructor 的構造操作

如何檢視編譯是否生成了預設建構函式?示例 class a class b int main 使用gcc編譯 關閉編譯優化 gcc c o0 a.cpp o a.o使用objdump檢視 objdump t a.o發現有函式符號 zn1ac2ev,使用 c filt 方便檢視,發現就是a的預設建構函式...

內聯函式,建構函式,靜態函

inline,static,constructor三種函式都不能帶有virtual關鍵字。inline是編譯時展開,必須有實體 static屬於class自己的,也必須有實體 virtual函式基於vtable 記憶體空間 constructor函式如果是virtual的,呼叫時也需要根據vtabl...