#include <iostream>
using namespace std;
class A {
public:
int test;
A(string text) { cout << "A is constructed: "<<text << endl; }
};
class B: virtual public A {
public:
B(): A("A called from B") { cout << "Constructor B" << endl; }
};
class C : virtual public A {
public:
C() : A("A called from C") { cout << "Constructor C" << endl; }
};
class D : public B, public C {
public:
D() : A("Mandatory, if there is no default consructor") { cout << "Constructor D" << endl; }
};
int main() {
D d;
cout << &d.B::test <<endl;
cout << &d.C::test <<endl;
cout <<&d.test<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQSB7CnB1YmxpYzogCglpbnQgdGVzdDsgCiAgICBBKHN0cmluZyB0ZXh0KSB7IGNvdXQgPDwgIkEgaXMgY29uc3RydWN0ZWQ6ICI8PHRleHQgPDwgZW5kbDsgfQp9OwoKY2xhc3MgQjogIHZpcnR1YWwgcHVibGljIEEgewpwdWJsaWM6CiAgICBCKCk6IEEoIkEgY2FsbGVkIGZyb20gQiIpIHsgY291dCA8PCAiQ29uc3RydWN0b3IgQiIgPDwgZW5kbDsgfQp9OwoKY2xhc3MgQyA6IHZpcnR1YWwgcHVibGljIEEgewpwdWJsaWM6CiAgICBDKCkgOiBBKCJBIGNhbGxlZCBmcm9tIEMiKSB7IGNvdXQgPDwgIkNvbnN0cnVjdG9yIEMiIDw8IGVuZGw7IH0KfTsKCmNsYXNzIEQgOiAgcHVibGljIEIsICBwdWJsaWMgQyB7CnB1YmxpYzogCiAgICBEKCkgOiBBKCJNYW5kYXRvcnksIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQgY29uc3J1Y3RvciIpIHsgY291dCA8PCAiQ29uc3RydWN0b3IgRCIgPDwgZW5kbDsgfQp9OwoKaW50IG1haW4oKSB7CglEIGQ7Cgljb3V0IDw8ICZkLkI6OnRlc3QgPDxlbmRsOyAKCWNvdXQgPDwgJmQuQzo6dGVzdCA8PGVuZGw7IAoJY291dCA8PCZkLnRlc3Q8PGVuZGw7IAoJcmV0dXJuIDA7Cn0=