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