class A {
public: virtual void funcA() { cout << "A::funcA" << endl; }
};

class B : public A {
private: void funcA() { cout << "B::funcA" << endl; }
public: void funcB() { funcA(); }
};

class C : public B {
public: void funcA() { cout << "C::funcA" << endl; }
};

int main()
{
 A a;
 B b;
 C c;
 A* ar[] = { &a, &b, &c };
 a.funcA(); b.funcB(); c.funcA();
 ar[0]->funcA(); ar[1]->funcA(); ar[2]->funcA();
 return 0;
}