class Base {
public:
void A();
protected
virtual void B();
}

void Base::A() {
B();
}

void Base::B() {
cout << "Base" << endl;
}

class Derived : public Base {
protected
virtual void B();
}

void Derived::B() {
cout << "Derived" << endl;
}

Base b;
b.A(); ⇒ 「Base」が表示される。

Derived d;
d.A(); ⇒ 「Derived」が表示される。

b = d;
b.A() ⇒ 「Base」が表示される。