#include <iostream>
class A
{
public:
virtual void foo() = 0;
};
class B : public A
{
public:
virtual void foo() = 0;
};
void B::foo()
{
std::cout << "I'm a B!" << std::endl;
}
class C : public B
{
public:
virtual void foo();
};
void C::foo()
{
B::foo();
std::cout << "I'm a C!" << std::endl;
}
int main() {
A *pa;
C c;
pa = &c;
pa->foo();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQQp7CnB1YmxpYzoKICAgIHZpcnR1YWwgdm9pZCBmb28oKSA9IDA7Cn07CgpjbGFzcyBCIDogcHVibGljIEEKewpwdWJsaWM6CiAgICB2aXJ0dWFsIHZvaWQgZm9vKCkgPSAwOwp9OwoKdm9pZCBCOjpmb28oKQp7CiAgc3RkOjpjb3V0IDw8ICJJJ20gYSBCISIgPDwgc3RkOjplbmRsOwp9CgpjbGFzcyBDIDogcHVibGljIEIKewpwdWJsaWM6CiAgICB2aXJ0dWFsIHZvaWQgZm9vKCk7Cn07Cgp2b2lkIEM6OmZvbygpCnsKICBCOjpmb28oKTsKICBzdGQ6OmNvdXQgPDwgIkknbSBhIEMhIiA8PCBzdGQ6OmVuZGw7Cn0KCmludCBtYWluKCkgewogICAgQSAqcGE7CiAgICBDIGM7CgogICAgcGEgPSAmYzsKICAgIHBhLT5mb28oKTsKICAgIAogICAgcmV0dXJuIDA7Cn0K