📜  C ++ |虚函数|问题9

📅  最后修改于: 2021-06-01 03:18:01             🧑  作者: Mango

析构函数可以是虚拟的吗?

可以编译以下程序吗?

#include 
using namespace std;
class Base {
public:
  virtual ~Base() {}   
};
int main() {
   return 0;
}

(A)是的
(B)答案: (A)
说明:析构函数可以是虚拟的。当基类指针指向派生类对象并删除该对象时,我们可能想调用适当的析构函数。如果析构函数不是虚拟的,则只能调用基类的析构函数。例如,考虑以下程序。

// Not good code as destructor is not virtual
#include
using namespace std;

class Base  {
public:
    Base()    { cout << "Constructor: Base" << endl; }
    ~Base()   { cout << "Destructor : Base" << endl; }
};

class Derived: public Base {
public:
    Derived()   { cout << "Constructor: Derived" << endl; }
    ~Derived()   { cout << "Destructor : Derived" << endl; }
};

int main()  {
    Base *Var = new Derived();
    delete Var;
    return 0;
}

Output on GCC:
Constructor: Base
Constructor: Derived
Destructor : Base

这个问题的测验

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。