C++多态流程

1.多态定义

在拥有继承关系的不同类中调用同一函数,产生不同结果称为多态
多态条件:
调用函数为虚函数且经过重写,使用指针或引用进行函数调用

2.多态实现流程

首先,在拥有虚函数的类在进行文件编译过程中,会生成该类的vtable,保存了当前类所有虚函数指针(vptr),其后子类继承时也会单独生成并继承vtable。
在使用指针或引用进行虚函数调用时,首先会确定当前指针指向对象的具体类型,然后查询当前类vtable中对应的vptr并转向对应函数进行操作

3.构造/析构函数中调用虚函数

构造函数中调用虚函数:子类进行构造的时候首先会以此从基类向派生类进行构造,基类构造函数运行时派生类空间尚未生成,此时对象类型可以视为基类类型,此时进行函数绑定时会将该函数和基类函数绑定;在后续类中运行构造函数时同理,会绑定距离该类最近的父类函数。

析构函数中调用虚函数:析构函数的调用顺序是从派生类到基类,在运行某一类的析构函数时,其子类的析构函数已经运行,子类空间已经消失,因此绑定的虚函数为距当前析构函数对应类的最近的父类函数。

你可能感兴趣的:(C++多态流程)