建構函式與析構函式分析

2022-08-21 01:48:16 字數 927 閱讀 6097

#include #include using namespace std;

class b ;

~b();

};class c ;

~c();

};class a ;

~a()

c c;

b b;

};int main()

試驗**如上。

輸出結果如下:

c

b

a

~a

~b

~c

為什麼呼叫建構函式的時候先呼叫c,然後b,最後才呼叫a呢?而呼叫函式析構正好相反呢?

我用現實中的乙個例子來說吧,假如我現在要建乙個樓房a,那麼建好a之前,是不是首先得建好窗戶b和門c,只有窗戶b和門c建好後,樓房a才算完工。

相反,拆房的時候,我首先是把a拆了,然後再去搗鼓b和c。

#include

usingnamespacestd

;classa

virtual

void func()

virtual

void func1()

~a()

};classb : publica

void func1()                    //

覆蓋~b()

};int  main(void )

而上面的這個例子又是另外一種情況,類b公有繼承類a,那麼b如果建立乙個物件必須得先呼叫父類a的建構函式,而呼叫結束後,先析構b後析構a。

建構函式與析構函式

建構函式 主要作用就是為物件初始化。有一點要說的是,在繼承體系彙總,如果在建構函式中,如果沒有指定基類的建構函式,那麼編譯器會在建構函式開頭加入,基類的預設建構函式,這樣就可以初始化基類物件部分 析構函式 對於析構函式,要說的多點,實際也不太複雜,就是加入了virtual 使其具有了多型性質 inc...

建構函式與析構函式

建構函式 先看看建構函式的呼叫順序規則,只要我們在平時程式設計的時候遵守這種約定,任何關於建構函式的呼叫問題都能解決 建構函式的呼叫順序總是如下 1.基類建構函式。如果有多個基類,則建構函式的呼叫順序是某類在類派生表中出現的順序,而不是它們在成員初始化表中的順序。2.成員類物件建構函式。如果有多個成...

建構函式與析構函式

概述 乙個類有兩種特殊的成員函式 建構函式與析構函式。建構函式功能是在建立物件時,給資料成員賦初值,即物件的初始化。析構函式的功能是釋放乙個物件,在物件刪除前,用它做一些記憶體釋放工作,與建構函式的功能相反。建構函式 在物件建立時它會被自動執行,因此變數 物件的初始化 一般都放在建構函式中。1 物件...