首先,我们知道,C++的动态多态是基于虚函数实现的 。
C++能够在运行时确定调用的函数是因为引入了虚函数,在类中引入虚函数后,在程序编译期间就会创建虚函数表,表中每一项数据都是虚函数的入口地址。
然而,怎么才能访问到虚函数表呢?
为了将对象与虚函数表关联起来,编译器会在对象中会增加一个指针成员用于存储虚函数表的位置。基类的指针指向派生类对象时就是通过虚函数表的指针来找到实际应该调用的函数。
这样一来,从逻辑上来说是没问题的。下面编写代码进行验证。
运行结果:
图解:
首先,我们知道,C++的动态多态是基于虚函数实现的 。
C++能够在运行时确定调用的函数是因为引入了虚函数,在类中引入虚函数后,在程序编译期间就会创建虚函数表,表中每一项数据都是虚函数的入口地址。
然而,怎么才能访问到虚函数表呢?
为了将对象与虚函数表关联起来,编译器会在对象中会增加一个指针成员用于存储虚函数表的位置。基类的指针指向派生类对象时就是通过虚函数表的指针来找到实际应该调用的函数。
这样一来,从逻辑上来说是没问题的。下面编写代码进行验证。
运行结果:
图解: