C 編譯器生成預設建構函式的四種情況

2021-07-14 05:23:39 字數 463 閱讀 1034

第一種是類成員中有成員是類物件,並且該成員的類含有預設建構函式,那麼c++編譯器會幫你給這個類也生成乙個預設建構函式,用來呼叫其成員物件的建構函式,完成該成員的初始化構造。需要強調的是,如果這個成員的類也沒有給出缺省建構函式,那麼c++編譯器也不會幫你生成該類的預設建構函式。

第二種情況是這個類的基類有預設建構函式。那麼c++編譯器也會幫你生成該派生類的預設建構函式,以呼叫基類的預設建構函式,完成基類的初始化。另外還得強調一下的是,如果基類沒有提供這個預設構造的函式,那麼c++編譯器也不會為派生類生成預設的建構函式(這裡包括兩層意思,第一,基類沒有任何形式建構函式;第二,基類存在其他形式的非預設建構函式,當然了,這種型別就是編譯不過的,道理很明顯)。

第三種情況是類中存在虛函式,那麼c++編譯器會為你生成預設建構函式,以初始化虛表(虛函式表vftable)。

第四種情況是存在虛基類,那麼c++編譯器會為你生成預設建構函式,以初始化虛基類表(vbtable)。

編譯器生成預設建構函式情況

1 類和物件 當乙個a類有預設建構函式,b類中包含a類物件,並且b類沒有建構函式,那麼編譯器會給b類生成預設建構函式 2 繼承 基類有預設的建構函式,派生類沒有顯示給出建構函式。這種情況下,因為建立派生類物件會呼叫基類的建構函式,所以編譯器認為有必要生成派生類建構函式,所以會生成乙個派生類的建構函式...

C 編譯器生成的預設函式

c 編譯器生成的預設函式 話題引入 物件的賦值與複製是如何進行的?他們的區別是什麼?如果乙個空的自定義型別能否執行這些操作?物件賦值 通過 運算子過載 user a 10 b b a 物件複製 呼叫拷貝建構函式 user b user a b 或者 user a b 相當於user a b 也是呼叫...

C 會生成預設建構函式的四種情況

c 標準是這樣寫的預設建構函式是由編譯器在需要的時候將其合成出來,這裡 include includeusing namespace std class a int main 強調的是 需要,而非必需,以程式示例 這個程式本身沒什麼好講的,能講的就是其彙編 除錯狀態下進入彙編 如下 11 你能找到構...