先看看下面这段代码:
#include <iostream>
using namespace std;
class base{
public:
virtual void vtu(){ cout << "virtual"<<endl; }
void novtu(){ cout << "no virtual"<<endl; }
~base(){ cout << "base discontruction"<<endl; }
base(){ cout << "base construction"<<endl; }
};
class A:public base{
void vtu(){ cout << "private virtual"<<endl; }
public:
A(){ cout << "A contruction"<<endl; }
~A(){ cout << "A discontruction"<<endl;}
};
void main(){
A *pa = new A ;
base *pb = (base*)pa;
pb->vtu();//访问私有而员
pb->novtu();
delete pb;
}
运行结果:
base construction
A contruction
A private virtual
no virtual
base discontruction
请按任意键继续. . .
在基类base 中的 析构函数里面加 virtual
运行结果:
base construction
A contruction
A private virtual
no virtual
A discontruction //多了A的析构哦,相当重要
base discontruction
请按任意键继续. . .