C++:基類析構函數爲虛函數場景

主題:類的構造函數和析構函數
01 繼承類構造和析構時,遵循如下原則
   1)構造時,先調用基類構造,然後調用繼承類構造
   2)析構時,先調用繼承類析構,然後調用基類析構
//注:在不涉及類指針操作時,基類的析構和構造不必爲virtual虛函數

02 基類指針指向繼承類對象,此時主動釋放基類指針指向的對象時,按如下操作。
   1)基類析構函數是虛函數,則先調用繼承類析構函數,然後調用基類析構
   2)基類析構函數是普通函數,則只調用基類析構函數
示例:
#include <iostream>
using namespace std;

class A
{
public:
    A()
    {
       cout<<"A construct"<<endl;
    }
    ~A()
    {
       cout<<"A desconstruct"<<endl;
    }
};

class  B:A
{
    B()
    {
       cout<<"B construct"<<endl;
    }
    ~B()
    {
       cout<<"B desconstruct"<<endl;
    }
}

void CS01()
{
    B * pB = new B();
    A * pA = (A*)pB;
    delete pA;
}

int main(char argc,char ** argv)
{
    CS01();
    return 0;
}

//注:輸出如下
>>A construct
>>B construct
>>A desconstruct
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章