析构函数可定义为虚函数,构造函数不能定义为虚函数,因为在调用构造函数时对象还没有完成实例化。在基类中及其派生类中动态分配空间时,必须把析构函数定义为虚函数,实现撤销对象的多态性。
必须是类中有存在虚函数时,我们才能把析构函数定义为虚函数。
如下代码:
#include<iostream>
using namespace std;
class Object
{
int val;
public:
Object(int x = 0):val(x)
{
cout<<"Create::Object: "<<this<<endl;
}
~Object()
{
cout<<"Destory::Object: "<<this<<endl;
}
virtual void fun(){}
};
class Base : public Object
{
int num;
public:
Base(int x = 0) : Object(x+10),num(x)
{
cout<<"Create::Base: "<<this<<endl;
}
~Base()
{
cout<<"Destroy Base: "<<this<<endl;
}
void fun(){}
};
int main()
{
Object *p = new Base(10);
delete p;
return 0;
}
运行结果为: