Comportamento da herança virtual neste caso
Eu escrevi este programa com herança virtual e tenho algumas perguntas.
<code>#include<iostream> using namespace std; class B1 { public: B1() { cout << "In B1 constructor\n"; } }; class V1 : public B1 { public: V1() { cout << "In V1 constructor\n"; } }; class D1 : virtual public V1 { public: D1() { cout << "In D1 constructor\n"; } }; class B2 { public: B2() { cout << "In B2 constructor\n"; } }; class B3 { public: B3() { cout << "In B3 constructor\n"; } }; class V2 : public B1, public B2 { public: V2() { cout << "In V2 constructor\n"; } }; class D2 : public B3, virtual public V2 { public: D2() { cout << "In D2 constructor\n"; } }; class X : public D1, virtual public D2 { public: X() { cout << "In X constructor\n"; } }; int main() { X x; return 0; } </code>
Saída do programa:
<code>In B1 constructor In V1 constructor In B1 constructor In B2 constructor In V2 constructor In B3 constructor In D2 constructor In D1 constructor In X constructor </code>
Eu esperava uma saída como esta:
<code>In B1 constructor In B2 constructor In V2 constructor In B2 constructor In D2 constructor In B1 constructor In V1 constructor In D1 constructor In X constructor </code>
com base no fato de que um objeto de uma classe base virtual é construído primeiro e depois o outro objeto de classe base. Alguém pode explicar esse comportamento?