class P;
  class C;
  
  void f(P* p) { cout << "f(P*)"; } 
\c{// (1)}
void f(C* c) { cout << "f(C*)"; }
\c{// (2)}
class P { public: virtual void f() { cout << "P::f"; }
\c{// (3)}
}; class C : public P { public: virtual void f() { cout << "C::f"; }
\c{// (4)}
};

slide: Static versus dynamic selection