【C++面试知识】虚函数的实现机制

阿里面试题,没答出。。

四个字:虚函数表。

1.什么是虚函数表

存放着类中所有虚函数对应的函数指针的表。

2.虚函数的构造过程

图转自:https://www.cnblogs.com/malecrab/p/5572730.html

该过程由编译器完成,也就是说虚函数替换发生编译阶段

【C++面试知识】虚函数的实现机制

3.虚函数调用过程

图转自:https://www.cnblogs.com/malecrab/p/5572730.html

【C++面试知识】虚函数的实现机制

上面pb具体指向的对象类型如何确定呢?(根据虚函数表)

如果pb指向B,那么找到B的虚函数表的地址,再加上bar函数在表中的偏移量就可以找打对应的函数B::bar()了;

如果pb指向D,那么找到D的虚函数表的地址,再加上bar函数在表中的偏移量就可以找打对应的函数D::bar()了;

4.多重继承的类的虚函数表构成

图转自:https://www.cnblogs.com/malecrab/p/5572730.html

一个类继承多个类时,而且子类都有虚函数,该类将有多个虚函数表,每个表的构造过程与单继承一样,每个表都进行拷贝与替换

【C++面试知识】虚函数的实现机制

虚函数调用过程变化不大,只是基类指针指向的位置可能不是派生类对象的起始位置,因为派生类将有多个虚函数表。

【C++面试知识】虚函数的实现机制