#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;
}