type
date
status
slug
summary
tags
category
icon
password
网址
定义虚函数的规则 类的成员函数定义为虚函数,但必须注意以下几条:
  1. 派生类中定义虚函数必须与基类中的虚函数同名外,还必须同参数表,同返回类型。否则被认为是 同名覆盖,不具有多态性。如基类中返回基类指针,派生类中返回派生类指针是允许的,这是一个 例外(协变)。
  1. 只有类的成员函数才能说明为虚函数。这是因为虚函数仅适用于有继承关系的类对象。友元函数和 全局函数也不能作为虚函数。
  1. 静态成员函数,是所有同一类对象共有,不受限于某个对象,不能作为虚函数。
  1. 内联函数每个对象一个拷贝,无映射关系,不能作为虚函数。
  1. 构造函数和拷贝构造函数不能作为虚函数。构造函数和拷贝构造函数是设置虚表指针。
  1. 析构函数可定义为虚函数,构造函数不能定义虚函数,因为在调用构造函数时对象还没有完成实例 化(虚表指针没有设置)。在基类中及其派生类中都动态分配的内存空间时,必须把析构函数定义 为虚函数,实现撤消对象时的多态性。
  1. 实现运行时的多态性,必须使用基类类型的指针变量或引用,使该指针指向该基类的不同派生类的 对象,并通过该指针指向虚函数,才能实现运行时的多态性。
  1. 在运行时的多态,函数执行速度要稍慢一些:为了实现多态性,每一个派生类中均要保存相应虚函 数的入口地址表,函数的调用机制也是间接实现。所以多态性总是要付出一定代价, 但通用性是一个 更高的目标。
  1. 如果定义放在类外,virtual只能加在函数声明前面,不能(再)加在函数定义前面。正确的定义必 须不包括virtual。