虚函数【C++】
来自智得网
简介
C++中的虚函数是指被 virtual 修饰的函数。
虚函数可以分为虚函数和纯虚函数,其中纯虚函数是指函数未被实现。纯虚函数一般起到接口的作用,用于规范接口的规范,继承了该类的实现类必须实现虚函数中定义的虚函数。
其他的虚函数可以使用基类的指针来调用子类的虚函数。
原理
虚函数通过继承等方式实现多态的机制。
不同于 Template(模版)采用编译时实现多态机制,虚函数是在运行时决定具体的调用函数。
虚函数的实现是由两个部分组成的,虚函数指针与虚函数表。
虚函数指针
虚函数指针 (virtual function pointer) 本质上就是普通的函数指针。
如果C++的类定义了虚函数,那么会为这个虚函数生成一个虚函数指针,在类被实例化之后,虚函数存储在对象地址的首位(为了保证运行效率),和普通的成员不同,虚函数指针对外部不可见,也不可以被直接调用。
虚函数的实现是一般在子类中实现,当调用某个子类的虚函数实现时,通过虚函数指针可以快速定位到接口。
虚函数表
虚指针指向的就是虚函数表,本质是一个数组,存着所有的虚函数指针。
如果父类的虚函数未被子类改写, 子类的虚函数表中的数据就是父类的对应的虚函数指针;如果父类的虚函数被子类进行了改写,子类中对应的虚函数表中的数据就是自身的虚函数指针,在程序运行过程中决议虚函数指向的过程就是动态绑定。