Что выведет данный код?
#include
struct A
{
A(int x = 3) { printf("%d\n", x); }
};
struct B: virtual public A
{
B() : A(4) {}
};
struct C: virtual public A
{
C() : A(5) { }
};
struct D: public B, public C
{
};
int main()
{
D d;
B b;
C c;
return 0;
}
Ответ:
3
4
5
Что самое смешное, можно из `D::D()` явно вызвать конструктор `A` с другим параметром. Наслаждаемся в C++ смесью виртуального наследования, раздельной компиляции и полученной кривости.