728x90
#include <iostream>
#include <string>
using namespace std;

class Calc
{
private:
	int m_value;

public:
	Calc(int init_value)
		:m_value(init_value)
	{}

	Calc& add(int value)
	{
		m_value += value;
		return *this;
	}
	Calc& sub(int value)
	{
		m_value -= value;
		return *this;
	}
	Calc& mult(int value)
	{
		m_value *= value;
		return *this;
	}

	void print()
	{
		cout << m_value << endl;
	}
};

int main()
{
 	Calc cal(10);
 	/*cal.add(2);
 	cal.sub(7);
 	cal.mult(2);*/
    
 	cal.add(2).sub(7).mult(4).print();

	Calc& temp1 = cal.add(2);
	Calc& temp2 = temp1.sub(7);
	Calc& temp3 = temp2.mult(4);
	temp3.print();
	return 0;
}

 

 

cal 라는 변수를 선언하고 10을 대입합니다.  private 를 이용해 캡슐화를 하고 int 형 변수 m_value 선언합니다.

public 안에서 생성자를 만들어 m_value 값을 변경합니다.

 

 

class Calc
{
private:
	int m_value;

public:
	Calc(int init_value)
		:m_value(init_value)
	{}

 

그리고 +, -, * 함수를 만듭니다.

 

 

class Calc
{
private:
	int m_value;

public:
	Calc(int init_value)
		:m_value(init_value)
	{}
	void add(int value) { m_value += value; }
	void sub(int value) { m_value -= value; }
	void mult(int value) { m_value *= value; }


	void print()
	{
		cout << m_value << endl;
	}
};

int main()
{
	Calc cal(10);
	cal.add(2);
	cal.sub(7);
	cal.mult(4);
	cal.print();
	return 0;
}

 

 

void 를 이용해 함수를 만들어 사용 할수도 있지만 매번 cal 를 호출해야 한다는 단점이 있습니다.

 

이럴때 this 포인터를 이용해서  return 값이 지금 나자신의 메모리값을 리턴하게합니다.

 

 

 

class Calc
{
private:
	int m_value;

public:
	Calc(int init_value)
		:m_value(init_value)
	{}

	Calc& add(int value)
	{
		m_value += value;
		return *this;
	}
	Calc& sub(int value)
	{
		m_value -= value;
		return *this;
	}
	Calc& mult(int value)
	{
		m_value *= value;
		return *this;
	}
    void print()
	{
		cout << m_value << endl;
	}
};

int main()
{
	cal.add(2).sub(7).mult(4).print();
    return 0;
}

 

 

cal.add(2).sub(7).mult(4) 라는 부분은 

 

Calc& temp1 = cal.add(2);
Calc& temp2 = temp1.sub(7);
Calc& temp3 = temp2.mult(4);

이 부분과 동일합니다.

728x90