通信,电信,互联网技术论坛
发新话题
打印

虚函数的问题 求助

虚函数的问题 求助

首先是代码:
#include<iostream.h>
class A
{
    public:
      virtual ~A()
      {
      cout<<"调用~A()"<<endl;
      }
};
class B:public A
{
    char *buf;
    public:
    B(int i){buf=new char;}
    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隐含着对析构的调用,因此就不会调用其其类的析构函数了)对这段文字不是很明白,希望大家帮我解答下。
谢谢

TOP

人过留名,雁过留声。

人过留名,雁过留声。
看帖回帖,占位顶贴

TOP

发新话题