构造函数不能是虚函数,主要有两个原因:
1、 派生类不能继承基类的构造函数,因此把基类的构造函数声明为虚函数没有意义,无法实现多态;
2、 c++中的构造函数用来在创建对象时进行初始化工作,在执行构造函数的时候,对象尚未创建完成,虚函数表这个时候还不存在, 也没有指向虚函数表的指针,所以此时还无法查询虚函数表。也就不知道调用哪一个构造函数。
析构函数用来在对象销毁时进行清理工作, 可以声明为虚函数,有时必须声明为虚函数(作为基类时)。
#include<iostream>
using namespace std;
class Base{
public:
Base();
~Base();
protected:
char *str;
};
Base::Base(){
str=new char[100];
cout<<"Base constractor"<<endl;
}
Base::~Base(){
delete[] str;
cout<<"Base deconstractor"<<endl;
}
class Derived:public Base{
public:
Derived();
~Derived();
private:
char *name;
};
Derived::Derived(){
name=new char[100];
cout<<"Dervied constractor"<<endl;
}
Derived::~Derived(){
delete[] name;