c++ virtual function 实现猜想

在C++中,最常见的多态指的是用基类指针指向一个派生类的实例,当用该指针调用一个基类中的虚函数时,实际调用的是派生类的函数实现,而不是基类函数。如果该指针指向另一个派生类实例,则调用另一个派生类的函数实现。因此,比如工厂模式返回一个实例,上层函数不需要知道实例来自哪个派生类,只需要用一个基类指针指向它,就可以直接获得需要的行为。从编译的角度来看,函数的调用地址并不是在编译阶段静态决定而是在运行阶段,动态地决定函数的调用地址。
多态是通过虚函数表实现的。当基类中用virtual关键字定义函数时,系统自动分配一个指针,指向该类的虚函数表。虚函数表中储存的是函数指针。在生成派生类的时候,会将派生类中对应的函数的地址写到虚函数表。之后,当利用基类指针调用函数时,先通过虚函数表指针找到对应的虚函数表,再通过表内储存的函数指针调用对应函数。由于函数指针指向派生类的实现,因此函数行为自然也就是派生类中定义的行为了。
Excerpt From: Yichao, Xiami, XiaoXiao & Fei Dong. “程序员面试白皮书.” iBooks. https://itun.es/us/zcOJ6.l

Leave a Reply

Your email address will not be published. Required fields are marked *