《深入探索C++对象模型》第3章中提到,一种实现虚拟继承的方法是:在virtual function table中放置virtual base class的offset,这样virtual function table可经由正值和负值来索引。如果是正值,索引到virtual functions;如果是负值,则索引到virtual base class offsets。GCC正是采用了类似的实现方式,我写了如下程序进行了测试:
- 图1是4个类的继承关系图:其中Y、Z虚拟继承自X,A多重继承自Y和Z。