私はC++の初心者です。特にオブジェクト指向プログラミングについて学んでいます。そして、今私は学習中に問題があります。仮想継承のコンストラクタの順序
次のクラス階層があります:
class Class{};
class Base:public Class{};
class Derived1:virtual public Base{};
class Derived2:virtual public Base{};
class MI:public Derived1,public Derived2{};
class Final:public MI,public Class{};
そして今、私は最終的なクラスオブジェクトの定義のコンストラクタの順序が何であるかを知りたいです。
私は図を描く:私は仮想基底クラスは、常に関係なく、継承階層に表示される場所の前に非仮想基底クラスに構築されている知っている structure of class inheritance http://hi.csdn.net/attachment/201203/16/2712336_1331902452BziD.jpg
を。私が混乱しているのは、ClassクラスのコンストラクタがBaseの前にあり、かつClassのコンストラクタが2回呼び出された場合です。なぜ?
誰かが私の答えを教えてくれますか?より詳細に、より良い。
怠け者のように理解するのはかなり簡単です。プログラムを構築する。あなたの各コンストラクタ(.e.g "I'm Base Constructor!")にdebug coutステートメントを入れてください。 coutステートメントに従って、構築の順序を観察します。 –
警告:あいまいさのために 'Final'で直接' Class'アクセスできない –
@ 0A0D:もちろん、コンパイラがどのようにそれを実装しているのかが分かります。それはあなたには十分に良いかもしれませんが、そうではないかもしれません。 :) –