构造函数不能是虚函数,虚函数必须把函数地址放在虚函数表中,虚函数表是靠虚函数指针来访问的,而虚函数指针是依靠对象的,构造函数实现的时候对象还不存在,并且如果构造函数是虚函数,在派生类里面调用基类的时候相当于调用派生类的构造函数,从基类继承而来的成员就没有办法进行初始化;
析构函数可以是虚函数,例如虚析构函数,这是我们在编程过程中经常使用的方法,当定义一个基类指针Base *p=new Derive()时;基类指针指向派生类对象的时候,在delete p的时候,只析构了基类的,派生类的无法析构,就需要把基类的析构函数实现成虚析构函数,在调用析构函数的时候就会进行动态绑定,访问p指向的对象,是Derive类型,访问它的虚函数表,派生类和基类的析构函数就都可以调用到;