C 編譯器何時為使用者提供預設建構函式

2021-06-16 11:15:46 字數 804 閱讀 6323

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

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

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

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

下面的例子中,就是因為基類a中沒有提供預設建構函式,導致編譯無法通過,為基類a新增上預設的建構函式後,編譯就通過了。。

#include "iostream"

using namespace std;

class a

//基類新增上預設建構函式就可以了

a(int c)

{ x=c;

cout<<"a"<

C 編譯器何時為使用者提供預設建構函式

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

C 編譯器何時提供預設的建構函式和拷貝建構函式

2008年08月27日 星期三 10 16 總的來說,編譯器只在它需要的時候才會合成乙個預設建構函式,或者擴張所有已存在的建構函式。乙個類滿足下列其中任何乙個條件 1.包含了乙個類的物件,這個物件有乙個建構函式 包括編譯器合成的預設建構函式 2.如果繼承自一些基類,其中某些基類有乙個建構函式 包括編...

何時編譯器會自動生成預設建構函式

問題 對c 初學者來說存在乙個誤區,如果類沒有定義任何建構函式,編譯器會自動生成預設的建構函式。注意 這種說法是錯誤的。正確的說法 惟有預設建構函式 被需要 的時候編譯器才會合成預設建構函式。那什麼情況下是 被需要 的時候?以下有四種情況編譯器會自動合成預設建構函式 情況1含有類物件資料成員,該類物...