#include <iostream>

class A
{
public:
    virtual void foo() = 0;
};

class B : public A
{
public:
    virtual void foo() = 0;
};

void B::foo()
{
  std::cout << "I'm a B!" << std::endl;
}

class C : public B
{
public:
    virtual void foo();
};

void C::foo()
{
  B::foo();
  std::cout << "I'm a C!" << std::endl;
}

int main() {
    A *pa;
    C c;

    pa = &c;
    pa->foo();
    
    return 0;
}
