私が次のようなものを持っている場合
class Base1 {};
class Base2 {};
class Derived : public Base1, public Base2 {};
次に、Derived のオブジェクトを作成する際のコンストラクター呼び出しの順序は、
Base1
Base2
つまり、表示される順序で
class Derived : public Base1, public Base2 {};
しかし、それをクラス Derived に変更すると: public Base1, virtual public Base2 {}; 次に、コンストラクター呼び出しの順序は次のようになります
Base2
Base1
なぜそうなのか理解できませんか?
別の単純な疑問: Base1 を仮想的に継承する意味と目的は何でしょうか。