保證基類的也被調用。什么情況下使用比較好呢。
#include <iostream>
using namespace std;
class Base{
private:
int num1;
public:
Base():num1(10)
{
}
virtual ~Base()
{
cout<<"base"<<endl;
}
};
class Dervied:public Base{
private:
int num2;
public:
Dervied():num2(1)
{
}
~Dervied()
{
cout<<"Dervied"<<endl;
}
};
int main()
{
Base *pBase = new Dervied();
delete pBase;
}
結果會
Dervied
Base
#include<iostream>
using namespace std;
class ClxBase
{
public:
ClxBase() {};
~ClxBase() {cout<<"Do base class destruct"<<endl;};
};
class ClxDerived : public ClxBase
{
public:
ClxDerived() {};
~ClxDerived() { cout << "Do derived class destruct!" << endl; };
};
int main()
{
ClxBase *pTest = new ClxDerived;
ClxDerived derived;
delete pTest;
}
另一個例子輸出的卻是 :
Do base class destruct
Do derived class destruct!
Do base class destruct
說明了兩個問題,只想派生類對象的基類指針需要基類聲明虛系構函數才能調用派生類指針,而派生類對象卻不用基類聲明虛系構函數就能調用派生類指針