預設建構函式之編譯器的約定

2022-07-18 07:42:14 字數 813 閱讀 7772

每個物件在建立的時候都會呼叫建構函式來為自己進行初始化。如果我們在類中並沒有提供現成的建構函式,那麼編譯器就會自動建立乙個預設地建構函式,它什麼都不會做,只會對我們所定義的物件進行初始化操作。比如說有乙個類a,如果在這個類裡面我們並沒有提供乙個建構函式,那麼編譯器就會自動為我們建立乙個不帶引數,函式體為空的預設建構函式:

a::a() {}
但是值得注意的一點是,如果我們自己在類中已經建立了乙個建構函式,那麼不管你建立的是像上面這樣的預設建構函式,還是乙個帶有引數的建構函式,編譯器都不會再為你提供任何預設建構函式。如下面這個程式:

class demo

int print()

private:

int x;

};#include using namespace std;

int main()

;

那麼,程式變成如下所示(在這個程式第3行中,我們自己宣告了乙個預設建構函式:

ok ,搞定,收工!!!

預設建構函式之編譯器的約定

每個物件在建立的時候都會呼叫建構函式來為自己進行初始化。如果我們在類中並沒有提供現成的建構函式,那麼編譯器就會自動建立乙個預設地建構函式,它什麼都不會做,只會對我們所定義的物件進行初始化操作。比如說有乙個類a,如果在這個類裡面我們並沒有提供乙個建構函式,那麼編譯器就會自動為我們建立乙個不帶引數,函式...

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

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

編譯器提供預設建構函式的幾種情況

在孫鑫的 vc 深入詳解 一書中,看到了這部分內容 在backer的幫助下,我們參看了ansic 的iso標準,並從彙編的角度試驗了幾種主流編譯器的行為,對於編譯器提供預設建構函式的行為得出下面的結論 如果乙個類中沒有定義任何建構函式,那麼只有以下三種情況時,編譯器才會提供預設建構函式 1 如果乙個...