C 的預設建構函式

2021-04-12 22:43:10 字數 1039 閱讀 6747

預設建構函式(default constructor)就是不需要帶任何引數的建構函式。預設的建構函式用來建立乙個「原型(vanilla)物件」,當編譯器需要建立乙個物件而又不知道任何其他細節時,預設函式會顯得如此重要。

如果在類定義的時候,有明確的預設建構函式,則在使用乙個類的時候,可以只做定義,而不需要顯式地呼叫建構函式。

最簡單的預設的建構函式很簡單,例如

class y

};其中的y() 就是預設的建構函式,但如果寫成

y(){}

也是對的,只不過變數i沒有被初始化。或者,我們不定義任何建構函式,編譯器會給我們自動建立乙個。

例如下面的**:

#include

using namespace std;

class obj

~obj()

int geta(void)

};int main(int argc, char * argv)

注意其中的建構函式:

obj(int aa = 0) : a(aa) {}

如果寫為

obj(int aa) : a(aa) {}

或者等價的

obj(int aa)

等形式,都會帶來編譯的錯誤:沒有合適的預設建構函式可用

因為在main函式中宣告o的時候沒有帶任何引數。

而如果寫成

obj(int aa = 0) : a(aa) {}

obj(int aa, char b) : a(aa)

有兩個建構函式,其中第乙個仍然是預設的建構函式,所以不會帶來錯誤。

但是如果寫為

obj(int aa = 0) : a(aa) {}

obj(int aa = 1, char b = 'k') : a(aa)

則vc7編譯器會報錯誤:

warning c4520: 「obj」 : 指定了多個預設建構函式

error c2668: 「obj::obj」 : 對過載函式的呼叫不明確

這些是比較顯然的錯誤。但實際上他的邏輯並不那麼簡單,這涉及到函式的匹配。

C 預設建構函式

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

c 預設建構函式

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

C 預設建構函式

先說c 新手一般的誤解 1.任何乙個類如果沒有定義預設建構函式,編譯器會自動合成乙個預設建構函式。2.編譯器合成出來的預設建構函式,會顯式的設定類中成員變數的值。先看乙個最基本的例子 從圖中可以看到物件a並沒有被初始化,即編譯器沒有為類a合成乙個預設建構函式。其實c 標準委員會曾敘述,如果沒有任何使...