これに関していくつか質問がありますが、私はまだこれについてはっきりしていません。この多重継承を考えてみましょう。
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;
};
そして、これらの2つのステートメントを検討してください
Base1 *pbase1 = new Derived;
Base2 *pbase2 = new Derived;
C++ オブジェクト モデル内の本には、最適化の 1 つに記載されています。
pbase1 サブオブジェクトの vtable と Derived は同じ vtable を共有します。本の正確なフレーズ
"基数 1 が左端で、既に派生クラス オブジェクトの先頭を指し"
これはどのように起こりますか?継承の順序を変更すると、これが変わることを理解しています
class Derived : public Base2, public Base1
しかし、これがコンパイラによってどのように行われるかわかりません。pbase1 と派生が同じ v_table を共有する方法を誰か説明できますか?