我正在阅读《C++对象模型》一书,试图理解如何通过虚表实现多继承和虚继承。(我已经很好地理解了单一多态性)。
当需要在虚继承或转换期间定位方法时,我很难理解到底发生了什么,因为需要执行许多偏移量计算。
是否有人能够帮助理解多重虚拟表是如何在多继承或虚继承示例中使用的?如果我能理解布局和问题,我可能会更好地理解这个问题。
我正在阅读《C++对象模型》一书,试图理解如何通过虚表实现多继承和虚继承。(我已经很好地理解了单一多态性)。
当需要在虚继承或转换期间定位方法时,我很难理解到底发生了什么,因为需要执行许多偏移量计算。
是否有人能够帮助理解多重虚拟表是如何在多继承或虚继承示例中使用的?如果我能理解布局和问题,我可能会更好地理解这个问题。
C++的实现通常使用虚函数表(vtable)来实现虚函数。虚函数表是一个指向函数指针的表格。每个带有虚函数的类对象都有一个隐藏的指向包含该类所有虚函数地址的vtable指针。
调用虚函数时,代码会计算出vtable中函数指针的偏移量,并调用存储在那里的函数。
当派生类覆盖(base class的)虚函数时,该类的虚函数表仅指向被覆盖的函数而不是原始函数。
这篇优秀的文章详细解释了它是如何工作的,包括单一和多重继承。
class B: virtual public A{
呢? - Bogdan Mart