析构函数可以是虚拟的吗?
可以编译以下程序吗?
#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基础课程》。