看下面的 C++ 代码
class Base1 {
public:
Base1();
virtual ~Base1();
virtual void speakClearly();
virtual Base1 *clone() const;
protected:
float data_Base1;
};
class Base2 {
public:
Base2();
virtual ~Base2();
virtual void mumble();
virtual Base2 *clone() const;
protected:
float data_Base2;
};
class Derived : public Base1, public Base2 {
public:
Derived();
virtual ~Derived();
virtual Derived *clone() const;
protected:
float data_Derived;
};
《C++对象模型内幕》4.2说Base1、Base2和Derived类的虚表布局是这样的:
我的问题是:
Derived类的Base1子对象的虚拟表包含Base2::mumble
。为什么?我知道Derived类与Base1共享这个虚拟表,所以我认为Base2的功能不应该出现在这里。有人可以告诉我为什么吗?谢谢。