#include <iostream>
using namesapce std;
class A
{
public:
virtual ~A(){cout<<"delete A"<<endl};
};
class B: public A
{
public:
B(int n):n(n){}
void show(){cout<<n<<endl;}
~B(){cout<<"delete B"<<endl;}
private:
int n;
}
int main()
{
A *pa;
B *pb = new B(1);
pa = pb;
delete pa;
pb->show();
return 0;
}
当CALSS A的析构函数是virtual ~A(){...}
,程序的输出: delete B delete A 1
当类A的析构函数是~A(){...}
,progarm的输出: delete A 0
为什么n的值是不同的时,类A的析构函数是虚拟或非虚拟?当调用B的析构函数销毁对象时,为什么会话成员n仍然存在?当A类的析构函数是虚拟的还是非虚拟的时,为什么B的calss成员n有不同的值?
你明白虚拟函数是什么吗? – Barry
什么是'pb-> show(){};'? – AnT
你可能想阅读这个http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ –