1. 程式人生 > >父類解構函式加virtual

父類解構函式加virtual

  1. #include<iostream>
  2. usingnamespace std;  
  3. class Base  
  4. {  
  5. public:  
  6.     Base(){}  
  7.     virtual ~Base(){}  //基類的解構函式應該宣告為虛解構函式。
  8.     virtualvoid  Test(){cout<<"Base Test"<<endl;}  
  9. };  
  10. class Derived:public Base  
  11. {  
  12. public:  
  13.     Derived(){}  
  14.     ~Derived(){cout<<"delete Derived"<<endl;}  
  15.     void Test(){cout<<"Derived Test"<<endl;}  
  16. };  
  17. void main()  
  18. {   
  19.     Base* pBase=new Derived();  //父類的指標指向派生類的物件。
  20.     pBase->Test();  
  21.     delete pBase; //<span style="color:#ff0000;">如果沒有Base基類的解構函式沒有宣告為virtual,是不會執行到子類的解構函式的。</span>
  22.                   //所以將父類的解構函式宣告為虛擬函式,作用是用父類的指標刪除一個派生類物件時,派生類物件的解構函式會被呼叫。
  23. }  
將父類的解構函式宣告為virtual是為了刪除父類指標時可以呼叫到子類的解構函式。