每個物件在建立的時候都會呼叫建構函式來為自己進行初始化。如果我們在類中並沒有提供現成的建構函式,那麼編譯器就會自動建立乙個預設地建構函式,它什麼都不會做,只會對我們所定義的物件進行初始化操作。比如說有乙個類a,如果在這個類裡面我們並沒有提供乙個建構函式,那麼編譯器就會自動為我們建立乙個不帶引數,函式體為空的預設建構函式:
a::a() {}但是值得注意的一點是,如果我們自己在類中已經建立了乙個建構函式,那麼不管你建立的是像上面這樣的預設建構函式,還是乙個帶有引數的建構函式,編譯器都不會再為你提供任何預設建構函式。如下面這個程式:
class demo那麼,程式變成如下所示(在這個程式第3行中,我們自己宣告了乙個預設建構函式:int print()
private:
int x;
};#include using namespace std;
int main()
;
ok ,搞定,收工!!!
預設建構函式之編譯器的約定
每個物件在建立的時候都會呼叫建構函式來為自己進行初始化。如果我們在類中並沒有提供現成的建構函式,那麼編譯器就會自動建立乙個預設地建構函式,它什麼都不會做,只會對我們所定義的物件進行初始化操作。比如說有乙個類a,如果在這個類裡面我們並沒有提供乙個建構函式,那麼編譯器就會自動為我們建立乙個不帶引數,函式...
編譯器生成預設建構函式情況
1 類和物件 當乙個a類有預設建構函式,b類中包含a類物件,並且b類沒有建構函式,那麼編譯器會給b類生成預設建構函式 2 繼承 基類有預設的建構函式,派生類沒有顯示給出建構函式。這種情況下,因為建立派生類物件會呼叫基類的建構函式,所以編譯器認為有必要生成派生類建構函式,所以會生成乙個派生類的建構函式...
編譯器提供預設建構函式的幾種情況
在孫鑫的 vc 深入詳解 一書中,看到了這部分內容 在backer的幫助下,我們參看了ansic 的iso標準,並從彙編的角度試驗了幾種主流編譯器的行為,對於編譯器提供預設建構函式的行為得出下面的結論 如果乙個類中沒有定義任何建構函式,那麼只有以下三種情況時,編譯器才會提供預設建構函式 1 如果乙個...