#include <iostream>
using namespace std;
class A {
public:
virtual void foo() {
cout << "A::foo()" << endl;
}
};
class B : public A {
public:
void foo() override {
cout << "B::foo()" << endl;
}
};
class C : public B {
public:
void foo() override {
cout << "C::foo()" << endl;
}
};
int main() {
A* ptr = new A;
ptr->foo();
ptr = new B;
ptr->foo();
ptr = new C;
ptr->foo();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQSB7CglwdWJsaWM6CgkJdmlydHVhbCB2b2lkIGZvbygpIHsKCQkJY291dCA8PCAiQTo6Zm9vKCkiIDw8IGVuZGw7CgkJfQp9OwoKY2xhc3MgQiA6IHB1YmxpYyBBIHsKCXB1YmxpYzoKCQl2b2lkIGZvbygpIG92ZXJyaWRlIHsKCQkJY291dCA8PCAiQjo6Zm9vKCkiIDw8IGVuZGw7CgkJfQp9OwoKY2xhc3MgQyA6IHB1YmxpYyBCIHsKCXB1YmxpYzoKCQl2b2lkIGZvbygpIG92ZXJyaWRlIHsKCQkJY291dCA8PCAiQzo6Zm9vKCkiIDw8IGVuZGw7CgkJfQp9OwoKaW50IG1haW4oKSB7CglBKiBwdHIgPSBuZXcgQTsKCXB0ci0+Zm9vKCk7CglwdHIgPSBuZXcgQjsKCXB0ci0+Zm9vKCk7CglwdHIgPSBuZXcgQzsKCXB0ci0+Zm9vKCk7CgkKCXJldHVybiAwOwp9