#include <iostream>
using namespace std;
struct A {
virtual ~A() {}
virtual void test() { cout << "A" << endl; }
};
struct B : A {
void test() { cout << "B" << endl; }
};
struct C : B {
C() : ip(new int()) {}
~C() { delete ip; }
void test() { cout << "C" << *ip << endl; }
int * ip;
};
int main() {
A* a = new A;
A* b = new B;
B* c = new C;
a->test();
b->test();
c->test();
delete a;
delete b;
delete c;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBBIHsKICAgIHZpcnR1YWwgfkEoKSB7fQogICAgdmlydHVhbCB2b2lkIHRlc3QoKSB7IGNvdXQgPDwgIkEiIDw8IGVuZGw7IH0KfTsKc3RydWN0IEIgOiBBIHsKICAgIHZvaWQgdGVzdCgpIHsgY291dCA8PCAiQiIgPDwgZW5kbDsgfQp9OwpzdHJ1Y3QgQyA6IEIgewogICAgQygpIDogaXAobmV3IGludCgpKSB7fQogICAgfkMoKSB7IGRlbGV0ZSBpcDsgfQogICAgdm9pZCB0ZXN0KCkgeyBjb3V0IDw8ICJDIiA8PCAqaXAgPDwgZW5kbDsgfQogICAgaW50ICogaXA7Cn07CgppbnQgbWFpbigpIHsKICAgIEEqIGEgPSBuZXcgQTsKICAgIEEqIGIgPSBuZXcgQjsKICAgIEIqIGMgPSBuZXcgQzsKCiAgICBhLT50ZXN0KCk7CiAgICBiLT50ZXN0KCk7CiAgICBjLT50ZXN0KCk7CgogICAgZGVsZXRlIGE7CiAgICBkZWxldGUgYjsKICAgIGRlbGV0ZSBjOwp9Cg==