#include <stdio.h>
class A {
public:
~A() {
putchar('A');
}
};
class B : public A {
public:
~B() {
putchar('B');
}
};
class C {
public:
virtual ~C() {
putchar('C');
}
};
class D : public C {
public:
~D() {
putchar('D');
}
};
class E {
public:
virtual ~E() {
putchar('E');
}
};
class F : public E {
public:
virtual ~F() {
putchar('F');
}
};
int main() {
puts(" ");
{printf("A: "); A a;}
{printf("\nB: "); B b;}
{printf("\nC: "); C c;}
{printf("\nD: "); D d;}
{printf("\nE: "); E e;}
{printf("\nF: "); F f;}
puts(" ");
{printf("\nA: "); delete (new A);}
{printf("\nB: "); delete (new B);}
{printf("\nC: "); delete (new C);}
{printf("\nD: "); delete (new D);}
{printf("\nE: "); delete (new E);}
{printf("\nF: "); delete (new F);}
puts(" ");
{printf("\nA: "); delete (new A);}
{printf("\nB: "); delete ((A*)new B);}
{printf("\nC: "); delete (new C);}
{printf("\nD: "); delete ((C*)new D);}
{printf("\nE: "); delete (new E);}
{printf("\nF: "); delete ((F*)new F);}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgpjbGFzcyBBIHsKcHVibGljOgoJfkEoKSB7CgkJcHV0Y2hhcignQScpOwoJfQp9OwoKY2xhc3MgQiA6IHB1YmxpYyBBIHsKcHVibGljOgoJfkIoKSB7CgkJcHV0Y2hhcignQicpOwoJfQp9OwoKY2xhc3MgQyB7CnB1YmxpYzoKCXZpcnR1YWwgfkMoKSB7CgkJcHV0Y2hhcignQycpOwoJfQp9OwoKY2xhc3MgRCA6IHB1YmxpYyBDIHsKcHVibGljOgoJfkQoKSB7CgkJcHV0Y2hhcignRCcpOwoJfQp9OwpjbGFzcyBFIHsKcHVibGljOgoJdmlydHVhbCB+RSgpIHsKCQlwdXRjaGFyKCdFJyk7Cgl9Cn07CgpjbGFzcyBGIDogcHVibGljIEUgewpwdWJsaWM6Cgl2aXJ0dWFsIH5GKCkgewoJCXB1dGNoYXIoJ0YnKTsKCX0KfTsKCmludCBtYWluKCkgewoJcHV0cygiICIpOwoJe3ByaW50ZigiQTogIik7IEEgYTt9Cgl7cHJpbnRmKCJcbkI6ICIpOyBCIGI7fQoJe3ByaW50ZigiXG5DOiAiKTsgQyBjO30KCXtwcmludGYoIlxuRDogIik7IEQgZDt9Cgl7cHJpbnRmKCJcbkU6ICIpOyBFIGU7fQoJe3ByaW50ZigiXG5GOiAiKTsgRiBmO30KCQoJcHV0cygiICIpOwoJe3ByaW50ZigiXG5BOiAiKTsgZGVsZXRlIChuZXcgQSk7fQoJe3ByaW50ZigiXG5COiAiKTsgZGVsZXRlIChuZXcgQik7fQoJe3ByaW50ZigiXG5DOiAiKTsgZGVsZXRlIChuZXcgQyk7fQoJe3ByaW50ZigiXG5EOiAiKTsgZGVsZXRlIChuZXcgRCk7fQoJe3ByaW50ZigiXG5FOiAiKTsgZGVsZXRlIChuZXcgRSk7fQoJe3ByaW50ZigiXG5GOiAiKTsgZGVsZXRlIChuZXcgRik7fQoJCglwdXRzKCIgIik7Cgl7cHJpbnRmKCJcbkE6ICIpOyBkZWxldGUgKG5ldyBBKTt9Cgl7cHJpbnRmKCJcbkI6ICIpOyBkZWxldGUgKChBKiluZXcgQik7fQoJe3ByaW50ZigiXG5DOiAiKTsgZGVsZXRlIChuZXcgQyk7fQoJe3ByaW50ZigiXG5EOiAiKTsgZGVsZXRlICgoQyopbmV3IEQpO30KCXtwcmludGYoIlxuRTogIik7IGRlbGV0ZSAobmV3IEUpO30KCXtwcmludGYoIlxuRjogIik7IGRlbGV0ZSAoKEYqKW5ldyBGKTt9CglyZXR1cm4gMDsKfQ==