#include <iostream>
using namespace std;
class X
{
virtual void internalCall() { cout << "Class X" << endl; }
public:
void externalCall() { internalCall(); }
};
class Y : public X
{
protected:
virtual void internalCall2() { cout << "Class Y2" << endl; }
virtual void internalCall()
{
cout << "Class Y" << endl;
internalCall2();
}
};
int main()
{
Y y;
y.externalCall();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgWAp7CiAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxDYWxsKCkgeyBjb3V0IDw8ICJDbGFzcyBYIiA8PCBlbmRsOyB9CnB1YmxpYzoKICAgIHZvaWQgZXh0ZXJuYWxDYWxsKCkgeyBpbnRlcm5hbENhbGwoKTsgfQp9OwoKY2xhc3MgWSA6IHB1YmxpYyBYCnsKcHJvdGVjdGVkOgogICAgdmlydHVhbCB2b2lkIGludGVybmFsQ2FsbDIoKSB7IGNvdXQgPDwgIkNsYXNzIFkyIiA8PCBlbmRsOyB9CiAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxDYWxsKCkgCiAgICB7CiAgICAgICAgY291dCA8PCAiQ2xhc3MgWSIgPDwgZW5kbDsKICAgICAgICBpbnRlcm5hbENhbGwyKCk7CiAgICB9Cn07CgppbnQgbWFpbigpCnsKICAgIFkgeTsKICAgIHkuZXh0ZXJuYWxDYWxsKCk7Cn0=