构造函数不可以是虚函数:
从实现上看,虚函数表在构造函数调用后才建立,因而构造函数不可能成为虚函数
从实际含义上看,在调用构造函数时还不能确定对象的真实类型(因为子类会调父类的构造函数);而且构造函数的作用是提供初始化,在对象生命期只执行一次,不是对象的动态行为,也没有太大的必要成为虚函数
析构函数可以是虚函数:
在继承体系中,基类的析构函数一般声明成虚函数,因为子类要重新定义它用来销毁对象。而且有的时候是必须的,基类指针指向派生类,用基类指针delete时,如果不定义成虚函数,派生类中派生的那部分无法析构。