Я думаю, что понимаю основной принцип виртуальных классов. Но я действительно озадачен тем, что на самом деле происходит при создании объектов, которые наследуются от виртуальных классов.
Например: (Выход равен 5)
#include <iostream>
using namespace std;
struct A {
public: int myInt;
A():myInt(5) {}
A(int n): myInt(n) {}
};
class B : virtual public A {
public:
B(int n):A(10) {} B():A(10) {}
};
class C : virtual public A {
public:
C(int n):A(3*n) {}
};
class D : public B, public C {
public:
D(int n=90) : C(2*n), B(n) {}
};
int main() {
D d(100);
cout << d.myInt << endl;
return 0;
}
Я понимаю, что сначала самый производный класс должен построить виртуальный класс. затем базовые классы, а затем введите конструктор.
Но что происходит при построении «части A» C и B с точки зрения «единственного созданного экземпляра A». Я знаю, что сначала неявно вызывается конструктор A, так как есть конструктор по умолчанию), а потом уже все прямые базовые классы.
Я предполагаю, что при создании, например, части A C конструктор A не вызывается снова, поскольку он уже создан. Я прав?