析构函数:

  • 析构函数可以为虚函数,一般情况下基类的析构函数要定义为虚函数
  • 只有在基类析构函数定义为虚函数时,调用delete销毁指向子类对象的基类指针时,才能准确调用子类的析构函数
  • 析构函数可以是纯虚函数,含有纯虚函数的类是抽象类,此时不能被实例化,只能被继承。派生类可以根据需求改写基类的纯虚函数。

  • 构造函数不能定义为虚函数,在构造函数中可以调用虚函数,不过此时调用的是正在构造的类中的虚函数而不是子类的虚函数,此时子类尚未构造好
  • 虚函数对应一个虚函数表,类中存储着一个vptr指向这个vtable。如果构造函数是虚函数,就需要通过vtable调用,可是对象没有初始化就没有vptr,无法找到vtable,所以构造函数不能是虚函数