class calculator
{
public:
	calculator(const int&  val)
	{
		init(val);
	}
	~calculator(){}

	void init(const int& val)
	{
		value = val;
	}

	void add(const int val) { value += val; }
	void subtract(const int val) { value -= val; }
	void multi(const int val) { value *= val; }
	void div(const int val) { value /= val; }

	void Print() { cout << "결과는 " << value << "입니다."; }
private:
	int value;
};

int main() {
// 줄줄이 꼬챙이를 한줄로 줄여보자.
	calculator c(10);
	c.add(10);
	c.subtract(10);
	c.multi(10);
	c.div(2);
	c.Print(); // 50
}
class calculator
{
public:
	calculator(const int&  val)
	{
		init(val);
	}
	~calculator(){}

	void init(const int& val)
	{
		value = val;
	}

	calculator& add(const int val) { value += val; return *this; }
	calculator& subtract(const int val) { value -= val; return *this; }
	calculator& multi(const int val) { value *= val; return *this; }
	calculator& div(const int val) { value /= val; return *this; }

	void Print() { cout << "결과는 " << value << "입니다."; }
private:
	int value;
};

int main() {
	calculator c(10);
	c.add(10).subtract(10).multi(10).div(2).Print();
}

// 복사가 아닌 자기 자신의 주소를 리턴한다. 그렇기 때문에 바로 참조 . 으로 이어 갈 수 있었던 것.