c++虚函数

  为了实现由一个基类派生出的多个子类,对于其中的某个功能,各个子类实现不同的操作,需要用到虚函数。

  如果将基类中的一个成员函数声明为虚函数(virtual),子类中的同名函数也成为虚函数,并且对基类版本形成覆盖。隐藏只需要是同名的标识符即可构成隐藏,而覆盖的条件非常严格。函数名、形参表、const必须一致,返回值也要一致(基本类型)或相符(类类型的指针或引用)。

  编译器遇到通过指向子类对象的基类指针调用基类中的虚函数时,与普通函数的处理不同,不会立刻生成调用代码,而会生成若干条指令,待程序运行时被执行。

  运行时执行如下动作:

  1. 根据基类指针指向的对象类型,找到目标对象中的虚函数表的指针(**);

  2. 通过虚函数表指针(**),找到虚函数的地址(*);

  3. 根据虚函数地址,执行虚函数代码。

  这种通过基类指针或引用最终调用子类是虚函数的现象,称为多态。

  如果子类中不存在覆盖版本,则执行基类中的虚函数。

  

原文地址:https://www.cnblogs.com/itit/p/3436679.html