// http://tinodidriksen.com/2010/01/31/snippet-pointer-usage-polymorphism/ #include struct A { virtual void foo() { std::cout << "A::foo()" << std::endl; } virtual ~A() { } }; struct B : public A { void foo() { std::cout << "B::foo()" << std::endl; } }; int main() { A *a = new A; a->foo(); delete a; a = new B; a->foo(); delete a; }