虚函数的问题
首先是代码:#include<iostream.h>
class A
{
public:
virtual ~A()
{
cout<<"调用~A()"<<endl;
}
};
class B:public A
{
char *buf;
public:
B(int i){buf=new char[i];}
virtual ~B()
{
delete [] buf;
cout<< "调用~B()"<<endl;
}
};
void fun(A *pa)
{
delete pa;
}
void main()
{
A *pa=new B(10);
fun(pa);
}
运行出来的答案是
调用~B()
调用~A()
当把类A的virtual 去掉时 结果又变成了 调用~A()
我的问题:
1、未去掉类A的VIRTUAL时,程序的执行步骤是什么,为什么答案是 调用B后在调用A。
2、为什么去掉类A的virtual后,B就不需要析构了(书上解释是当不把基类的析构说明为虚函数时,delete隐含着对析构的调用,因此就不会调用其其类的析构函数了)对这段文字不是很明白,希望大家帮我解答下。
谢谢