虚函数
- 虚函数:(virtual function)允许函数调用与函数体间的联系在运行时才建立,是实现动态联编的基础。
- 虚函数的定义:
virtual 函数类型 函数(形参表)
{
函数体;
}
- 使用使用虚函数实现动态联编需满足:
- 类型兼容规则。
- 在基类中定义虚函数,在派生类中重新定义。如果派生类中没有重新定义虚函数,基类虚函数充当派生类的虚函数。
- 要由成员函数、指针或引用访问虚函数,不能通过对象直接访问。
- 如果派生类中定义虚函数的重载函数而没有重新定义虚函数,重载函数由于同名覆盖会覆盖掉虚函数,此时再试图调用派生类的虚函数会出错。
- 构造函数不能是虚函数(因为当开始调用构造函数时,对象还没有完成实例化,只有构造完成后对象才是名副其实的对象),但析构函数可以,且通常定义为虚函数。格式为:
virtual ~函数名();
- 基类中的析构函数定义为虚函数,派生类的析构函数也会自动被定义为虚函数。
- 如果使用基类指针指向由new运算建立的对象,而delete又作用于指向派生类对象的基类指针,就要将基类的析构函数声明为虚析构函数。(否则会造成内存泄露,即派生类对象动态分配的内存空间在派生类对象生命周期结束后,既不能被本程序使用,也不能被释放。)——>