基類和派生類析構函式執行順序

2022-08-30 15:12:16 字數 1154 閱讀 5403

下面是自己實驗結果:

沒有宣告虛函式時:

#include using

namespace

std;

class

base

~base()

};class derived: public

base

~derived()

};int

main()

輸出:base contruction

derived contruction 1

base contruction

derived contruction 2

base deconstruction

derived deconstruction1

base deconstruction

跟上面博文實驗結果一致

總結:由上面的實驗結果可以看出,當 new cderive() 時,會先執行基類的建構函式,然後再執行派生類的建構函式;

而當 delete pointer 時,編譯器只考慮 pointer 指標本身的型別而不關心 pointer 實際指向的型別,即:若 pointer 為基類指標,則只呼叫基類的析構函式(不管 pointer 實際指向的是基類還是派生類);若 pointer 是派生類指標,則先呼叫派生類的析構函式,再呼叫基類的析構函式,呼叫順序與呼叫建構函式的順序相反。

在宣告虛函式之後:

#include using

namespace

std;

class

base

virtual ~base()

};class derived: public

base

virtual ~derived()

};int

main()

輸出:base contruction

derived contruction 1

base contruction

derived contruction 2

derived deconstruction2

base deconstruction

derived deconstruction1

base deconstruction

C 基類和派生類的析構函式

和建構函式類似,析構函式也不能被繼承。與建構函式不同的是,在派生類的析構函式中不用顯式地呼叫基類的析構函式,因為每個類只有乙個析構函式,編譯器知道如何選擇,無需程式設計師干涉。另外析構函式的執行順序和建構函式的執行順序也剛好相反 建立派生類物件時,建構函式的執行順序和繼承順序相同,即先執行基類建構函...

C 基類和派生類構造和析構函式的順序!

在visual studio中,新建控制台工程,構造類如下 include using namespace std class cbase cbase class cderive public cbase cderive 對應不同的指標進行 delete 操作,結果如下 i int main int...

派生類建構函式和析構函式的執行順序

include using namespace std class contained1 構造constructor contained1 析構destructor class contained2 contained2 class contained3 contained3 class basec...