下面是自己實驗結果:
沒有宣告虛函式時:
#include usingnamespace
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 usingnamespace
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...