c 學習 預設建構函式

2021-08-20 19:30:17 字數 1554 閱讀 2118

預設建構函式(default constructor)就是在沒有顯式提供初始化式時呼叫的建構函式。它由不帶引數的建構函式,或者為所有的

形參提供預設

實參的建構函式定義。如果定義某個類的變數時沒有提供初始化時就會使用預設建構函式。

中文名預設建構函式

外文名default constructor

涉及領域

計算機編譯

常見語言

c++語言 1

簡介2基本資訊

編輯如果使用者定義的類中沒有顯式的定義任何建構函式,

編譯器就會自動為該型別生成預設建構函式,稱為合成的建構函式(synthesized default constructor)。

編輯如果類包含內建或復合型別的成員,則該類就不應該依賴於合成的預設建構函式,它應該定義自己的建構函式來初始化這些成員。

多數情況下,

編譯器為類生成乙個公有的預設建構函式,只有下面兩種情況例外:

1.乙個類顯式地宣告了任何建構函式,編譯器不生成公有的預設建構函式。在這種情況下,如果程式需要乙個預設建構函式,需要由類的設計者提供。

2.乙個類宣告了乙個非公有的預設建構函式,編譯器不會生成公有的預設建構函式。

c++編譯器必須為未宣告建構函式之class合成乙個預設建構函式

第一,class 有member object(該member object有default constructor), class需要default constructor呼叫member object default constructor

第二,如果乙個沒有任何constructor的class 派生自乙個"帶有default constructor"的base class.那麼它的default constructor會被合成出來。

第三,如果乙個class申明了virtual function,,如果該類沒有任何constructor,

編譯器也會為它加default constructor.

(如果使用者有constructor,編譯器會在他的constructor中新增一些code,用來初始化vptr)

第四,乙個class(沒有申明任何constructor)派生自乙個繼承串鏈,其中有乙個或多個virtual base classes,編譯器也會合成出乙個default constructor,在其中放入每乙個virtual base class的執行期訪問操作的的碼,

(如果使用者申明了constructors,編譯器會在constructor中安插virtual base class執行期訪問操作的的碼)

上面四種分析合成出的default constructor都是nontrivial default constructors,

不在此情況之內的都trivial default constructors,它們實際上並不會被

編譯器合成出來

在合成的default constructors,只有base class subobjects和member class object會

被初始化,所有其它的nonstatic data member,如整數、整數

指標、整數

陣列等等都不會被編譯器初始化。

C 學習之預設建構函式

當我們寫乙個空類而不新增任何 時,卻可以用它來建立物件,拷貝 賦值等操作。例如 include using namespace std class empty int main int argc,char args 執行上述程式發現並麼有報錯 這是因為編譯器給我們自動的生成了一些函式,包括,預設建構...

C 預設建構函式

c 預設建構函式 一直認為若程式設計師沒有自己定義無引數的建構函式,那麼編譯器會自動生成預設建構函式,來進行對成員函式的初始化,但這種認為是有誤的,不全面的.預設的建構函式分為有用的和無用的,所謂無用的預設建構函式就是乙個空函式 什麼操作也不做,而有用的預設建構函式是可以初始化成員的函式。對建構函式...

c 預設建構函式

c 什麼時候合成預設建構函式?c 合成的預設建構函式都做些什麼?以下三個條件同時滿足 源程式中沒有宣告任何建構函式 編譯器需要該類有預設建構函式 程式中需要呼叫預設建構函式 預設建構函式是以編譯單元為單位生成的 什麼時候編譯器需要預設建構函式 該類中有 有預設建構函式 的成員物件 該類繼承乙個有預設...