次の 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 の関数はここに表示されるべきではないと思います。誰か教えてください。どうも。