単一の継承は実装が簡単です。例えば、Cで、継承はとしてシミュレートすることができます。C++の多重継承はどのように実装されていますか?
struct Base { int a; }
struct Descendant { Base parent; int b; }
しかし、多重継承では、コンパイラは新たに構築されたクラス内の複数の親を手配しなければなりません。どうしたの?
私が見ている問題は、親がABかBAで整理されているのか、それとも別の方法で整理されているのでしょうか?そして、私がキャストを行う場合:
SecondBase * base = (SecondBase *) &object_with_base1_and_base2_parents;
コンパイラは元のポインタを変更するかどうかを検討する必要があります。同様のトリッキーなことがバーチャルで必要です。
http://en.wikipedia.org/wiki/Diamond_problem – Dario
Cのシミュレーションでは、VTable(実装の詳細)ポインタが忘れています。 –
@Dario:この記事では、多重継承のオーバーロード問題について説明しますが、C++でのオブジェクトレイアウトとオブジェクトのキャストについては何も含まれていません。 – mmmmmmmm