Код:
#include <iostream>
using namespace std;
class A
{
public:
virtual void foo() {cout << "A::foo()\n";}
} ;
class C
{
public:
C(A& a) {a.foo();}
} ;
class B : public A
{
public:
void foo() {cout << "B::foo()\n";}
} ;
main()
{
B* b=new B();
A *a=b;
a->foo();
b->foo();
cin.get();
}
а тут слово virtual имеет значение. Тут типичный случай полиморфизма - объект A подменяет свои виртуальные функции функциями из объекта B.