#include <iostream>
using namespace std;
class B {
int x; // just to make sure the result is not due to EBO
public: virtual void foo() { cout << "B::foo\n"; }
};
class D : public B {
int y; // just to make sure the result is not due to EBO
public: virtual void foo() { cout << "D::foo\n"; }
};
class DD : public D {
int z; // just to make sure the result is not due to EBO
public: virtual void foo() { cout << "DD::foo\n"; }
};
int main() {
B* pb = new DD();
pb->foo();
cout << hex << pb << endl;
D* pd = static_cast<D*>(pb);
pd->foo();
cout << hex << pd << endl;
DD* pdd = static_cast<DD*>(pb);
pdd->foo();
cout << hex << pdd << endl;
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQiB7CglpbnQgeDsgLy8ganVzdCB0byBtYWtlIHN1cmUgdGhlIHJlc3VsdCBpcyBub3QgZHVlIHRvIEVCTwoJcHVibGljOiB2aXJ0dWFsIHZvaWQgZm9vKCkgeyBjb3V0IDw8ICJCOjpmb29cbiI7IH0KfTsKCmNsYXNzIEQgOiBwdWJsaWMgQiB7CglpbnQgeTsgLy8ganVzdCB0byBtYWtlIHN1cmUgdGhlIHJlc3VsdCBpcyBub3QgZHVlIHRvIEVCTwoJcHVibGljOiB2aXJ0dWFsIHZvaWQgZm9vKCkgeyBjb3V0IDw8ICJEOjpmb29cbiI7IH0KfTsKCmNsYXNzIEREIDogcHVibGljIEQgewoJaW50IHo7IC8vIGp1c3QgdG8gbWFrZSBzdXJlIHRoZSByZXN1bHQgaXMgbm90IGR1ZSB0byBFQk8KCXB1YmxpYzogdmlydHVhbCB2b2lkIGZvbygpIHsgY291dCA8PCAiREQ6OmZvb1xuIjsgfQp9OwoKaW50IG1haW4oKSB7CglCKiBwYiA9IG5ldyBERCgpOwoJcGItPmZvbygpOwoJY291dCA8PCBoZXggPDwgcGIgPDwgZW5kbDsKCQoJRCogcGQgPSBzdGF0aWNfY2FzdDxEKj4ocGIpOwoJcGQtPmZvbygpOwoJY291dCA8PCBoZXggPDwgcGQgPDwgZW5kbDsKCQoJREQqIHBkZCA9IHN0YXRpY19jYXN0PEREKj4ocGIpOwoJcGRkLT5mb28oKTsKCWNvdXQgPDwgaGV4IDw8IHBkZCA8PCBlbmRsOwoJCgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglyZXR1cm4gMDsKfQ==