#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;
}