#include <iostream>
/*
A
/ \
B C
\ /
D
*/
using namespace std;
class A
{
public:
int x;
virtual string whoami() const
{
return "A";
}
virtual ~A() {}
};
class B : public A
{
public:
virtual string whoami() const override
{
return "B";
}
};
class C : public A
{
public:
virtual string whoami() const override
{
return "C";
}
};
class D : public B, public C
{
public:
virtual string whoami() const override
{
return "D";
}
};
int main()
{
D *d = new D;
B *b = d;
C *c = d;
b->x = 1;
c->x = 2;
cout << b->x << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKLyoKCQlBCiAgIC8gXAogIEIgICBDCiAgIFwgLwogICAgRAoqLwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEEKewpwdWJsaWM6CglpbnQgeDsKCgl2aXJ0dWFsIHN0cmluZyB3aG9hbWkoKSBjb25zdAoJewoJCXJldHVybiAiQSI7Cgl9CgoJdmlydHVhbCB+QSgpIHt9Cn07CgpjbGFzcyBCIDogcHVibGljIEEKewpwdWJsaWM6Cgl2aXJ0dWFsIHN0cmluZyB3aG9hbWkoKSBjb25zdCBvdmVycmlkZQoJewoJCXJldHVybiAiQiI7Cgl9Cn07CgpjbGFzcyBDIDogcHVibGljIEEKewpwdWJsaWM6Cgl2aXJ0dWFsIHN0cmluZyB3aG9hbWkoKSBjb25zdCBvdmVycmlkZQoJewoJCXJldHVybiAiQyI7Cgl9Cn07CgpjbGFzcyBEIDogcHVibGljIEIsIHB1YmxpYyBDCnsKcHVibGljOgoJdmlydHVhbCBzdHJpbmcgd2hvYW1pKCkgY29uc3Qgb3ZlcnJpZGUKCXsKCQlyZXR1cm4gIkQiOwoJfQp9OwoKaW50IG1haW4oKQp7CglEICpkID0gbmV3IEQ7CglCICpiID0gZDsKCUMgKmMgPSBkOwoKCWItPnggPSAxOwoJYy0+eCA9IDI7Cgljb3V0IDw8IGItPnggPDwgZW5kbDsKfQ==