#include <iostream>
using namespace std;
class X
{
private:
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();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgWAp7CnByaXZhdGU6CiAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxDYWxsKCkKICAgIHsKICAgICAgICBjb3V0IDw8ICJDbGFzcyBYIiA8PCBlbmRsOwogICAgfQpwdWJsaWM6CiAgICB2b2lkIGV4dGVybmFsQ2FsbCgpCiAgICB7CiAgICAgICAgaW50ZXJuYWxDYWxsKCk7CiAgICB9Cn07CgpjbGFzcyBZIDogcHVibGljIFgKewpwcm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxDYWxsMigpCiAgICB7CiAgICAgICAgY291dCA8PCAiQ2xhc3MgWTIiIDw8IGVuZGw7CiAgICB9CiAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxDYWxsKCkKICAgIHsKICAgICAgICBjb3V0IDw8ICJDbGFzcyBZIiA8PCBlbmRsOwogICAgICAgIGludGVybmFsQ2FsbDIoKTsKICAgIH0KCgp9OwoKaW50IG1haW4oKQp7CiAgICBZIHk7CgogICAgeS5leHRlcm5hbENhbGwoKTsKCiAgICByZXR1cm4gMDsKfQ==