#include <iostream>
struct A
{
virtual void printA() {std::cout << "A " << this << std::endl;}
};
struct B
{
virtual void printB() {std::cout << "B " << this << std::endl;}
};
struct C : public A, public B
{
};
using namespace std;
int main() {
// your code goes here
C* c = new C();
A* a = c;
B* b = c;
C* c2 = dynamic_cast<C*>(b);
a->printA();
b->printB();
c2->printA();
c2->printB();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEEKewoJdmlydHVhbCB2b2lkIHByaW50QSgpIHtzdGQ6OmNvdXQgPDwgIkEgIiA8PCB0aGlzIDw8IHN0ZDo6ZW5kbDt9Cn07CgpzdHJ1Y3QgQgp7Cgl2aXJ0dWFsIHZvaWQgcHJpbnRCKCkge3N0ZDo6Y291dCA8PCAiQiAiIDw8IHRoaXMgPDwgc3RkOjplbmRsO30KfTsKCnN0cnVjdCBDIDogcHVibGljIEEsIHB1YmxpYyBCCnsKCQp9OwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJCglDKiBjID0gbmV3IEMoKTsKCUEqIGEgPSBjOwoJQiogYiA9IGM7CglDKiBjMiA9IGR5bmFtaWNfY2FzdDxDKj4oYik7CglhLT5wcmludEEoKTsKCWItPnByaW50QigpOwoJYzItPnByaW50QSgpOwoJYzItPnByaW50QigpOwoJCglyZXR1cm4gMDsKfQ==