#include <iostream>
using namespace std;
class InitializeBase
{
public:
virtual ~InitializeBase() = default;
bool isInit() const
{
return isInit_;
}
void init()
{
doInit();
isInit_ = true;
}
private:
virtual void doInit() = 0;
bool isInit_ = false;
};
class Backdoor : public InitializeBase
{
public:
void init_twice() { doInit(); doInit(); }
void doInit() override { std::cout << "Yes, I can" << std::endl; }
};
int main() {
Backdoor bd;
bd.init();
bd.init_twice();
bd.doInit();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgSW5pdGlhbGl6ZUJhc2UKewpwdWJsaWM6CiAgICB2aXJ0dWFsIH5Jbml0aWFsaXplQmFzZSgpID0gZGVmYXVsdDsKCiAgICBib29sIGlzSW5pdCgpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIGlzSW5pdF87CiAgICB9CgogICAgdm9pZCBpbml0KCkKICAgIHsKICAgICAgICBkb0luaXQoKTsKICAgICAgICBpc0luaXRfID0gdHJ1ZTsKICAgIH0KCnByaXZhdGU6CiAgICB2aXJ0dWFsIHZvaWQgZG9Jbml0KCkgPSAwOwoKICAgIGJvb2wgaXNJbml0XyA9IGZhbHNlOwp9OwoKY2xhc3MgQmFja2Rvb3IgOiBwdWJsaWMgSW5pdGlhbGl6ZUJhc2UKewpwdWJsaWM6CiAgICB2b2lkIGluaXRfdHdpY2UoKSB7IGRvSW5pdCgpOyBkb0luaXQoKTsgfQogICAgdm9pZCBkb0luaXQoKSBvdmVycmlkZSB7IHN0ZDo6Y291dCA8PCAiWWVzLCBJIGNhbiIgPDwgc3RkOjplbmRsOyB9Cn07CgppbnQgbWFpbigpIHsKCUJhY2tkb29yIGJkOwoJYmQuaW5pdCgpOwoJYmQuaW5pdF90d2ljZSgpOwoJYmQuZG9Jbml0KCk7Cn0K