#include <iostream>
const int SAMSUNG = 1;
const int BORING_STUFF_MAX = 100;
class AwesomeME;
class Me
{
public:
void operator=(AwesomeME* me) { ame = me; }
int getEmployer() { return employer; }
void doBoringStuff() { if (BORING_STUFF_MAX < ++boringCtr) employer = SAMSUNG; }
void launchCareer() { salary += 10000; };
AwesomeME* getAwesomeME() { return ame; }
private:
int employer = 0;
int boringCtr = 0;
int salary = 5000;
AwesomeME* ame = nullptr;
};
class AwesomeME : public Me
{
public:
~AwesomeME() { std::cout << "Happy end!\n"; }
};
int main()
{
Me me;
// --------------------------------------------------
while (true)
{
if (me.getEmployer() != SAMSUNG) {
me.doBoringStuff();
}
else {
me = new AwesomeME();
me.launchCareer();
break;
}
}
// --------------------------------------------------
delete me.getAwesomeME();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY29uc3QgaW50IFNBTVNVTkcgPSAxOwpjb25zdCBpbnQgQk9SSU5HX1NUVUZGX01BWCA9IDEwMDsKCmNsYXNzIEF3ZXNvbWVNRTsKCmNsYXNzIE1lCnsKcHVibGljOgoJdm9pZCBvcGVyYXRvcj0oQXdlc29tZU1FKiBtZSkgeyBhbWUgPSBtZTsgfQoJaW50IGdldEVtcGxveWVyKCkgICAgICAgICAgICAgeyByZXR1cm4gZW1wbG95ZXI7IH0KCXZvaWQgZG9Cb3JpbmdTdHVmZigpICAgICAgICAgIHsgaWYgKEJPUklOR19TVFVGRl9NQVggPCArK2JvcmluZ0N0cikgZW1wbG95ZXIgPSBTQU1TVU5HOyB9Cgl2b2lkIGxhdW5jaENhcmVlcigpICAgICAgICAgICB7IHNhbGFyeSArPSAxMDAwMDsgfTsKCUF3ZXNvbWVNRSogZ2V0QXdlc29tZU1FKCkgICAgIHsgcmV0dXJuIGFtZTsgfQoKcHJpdmF0ZToKCWludCBlbXBsb3llciAgPSAwOwoJaW50IGJvcmluZ0N0ciA9IDA7CglpbnQgc2FsYXJ5ICAgID0gNTAwMDsKCUF3ZXNvbWVNRSogYW1lID0gbnVsbHB0cjsKfTsKCmNsYXNzIEF3ZXNvbWVNRSA6IHB1YmxpYyBNZQp7CnB1YmxpYzoKCX5Bd2Vzb21lTUUoKSB7IHN0ZDo6Y291dCA8PCAiSGFwcHkgZW5kIVxuIjsgfQp9OwoKaW50IG1haW4oKQp7CglNZSBtZTsKCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgl3aGlsZSAodHJ1ZSkKCXsKCQlpZiAobWUuZ2V0RW1wbG95ZXIoKSAhPSBTQU1TVU5HKSB7CgkJCW1lLmRvQm9yaW5nU3R1ZmYoKTsKCQl9CgkJZWxzZSB7CgkJCW1lID0gbmV3IEF3ZXNvbWVNRSgpOwoJCQltZS5sYXVuY2hDYXJlZXIoKTsKCQkJYnJlYWs7CgkJfQoJfQoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWRlbGV0ZSBtZS5nZXRBd2Vzb21lTUUoKTsKCXJldHVybiAwOwp9