공부 중 메모/C++ STL(Book : 뇌를 자극하는 STL)

0. 연산자 오버로딩 (1) // C++ 문법 복습

라이피 (Lypi) 2019. 7. 10. 02:54
반응형

이전 포스팅의 내용이 기억이 안 나므로 책을 처음부터 공부하기로 결정함.

 

 

#include 
using namespace std;


//직접 정의한 클래스
class Point
{
	int x;
	int y;

public:

	void Print() const  // const 함수: 함수 안에서 멤버 변수의 값을 변경할 수 없음을 의미 
	{
		//const 함수 내에서는 const 함수만 호출할 수 있다.
		cout << "(" << x << "," << y << ")";
	}


public:
	Point operator+ (Point arg)
	{
		//cout << "\noperator+ () 함수호출" << endl;

		Point ret;

		ret.x = this->x + arg.x;
		ret.y = this->y + arg.y;

		return ret;
	}

	//아래의 const는 리턴값을 바로 변경할 수 없다는 뜻이다.
	// (p3++) + p2 같은 식으로 쓸 수 없다는 뜻

	const Point operator-- () //전위 --연산자
	{
		--x; --y;
		return (*this);
	}

	//후위 연산자라고 자동으로 우리가 생각되는 방식으로 작동하진 않는다.
    //그러므로 후위연산자를 구현하기 위해서 원래 값을 따로 저장해뒀다가 그 값을 리턴해주자.

	const Point operator-- (int) //후위 --연산자
	{
		Point tmp = *this;
		--(*this);
		return tmp;
	}

public:
	//생성자 정의
	Point(int _x = 0, int _y = 0) : x(_x), y(_y)	{	} 

	
};

int main()
{
	//int n1 = 10, n2 = 20;
	//cout << n1 + n2 << endl; // 정의되어 있는 연산

	Point p1(1, 1);
	Point p2(2, 2);

	//p1 + p2;는 p1.operator+(p2); 와 같다. 즉 연산자도 특수한 형태의 함수라는 것.
	Point p3 = p1 + p2; //연산이 정의되어 있지 않으면 에러가 난다.
	cout << "p3"; p3.Print(); cout << endl;

	Point p4(4, 4);
	Point p5(5, 5);

	//함수 형태로 직접 호출하기.
	Point p6 = p4.operator+(p5);
	cout << "p6";  p6.Print(); cout << endl;

	cout << endl;

	Point p7 = --p3;
	cout << "\nPoint p7 = --p3;";
	cout << "\np7"; p7.Print();
	cout << "\np3"; p3.Print();
	cout << endl;

	Point p8 = p6--;
	cout << "\nPoint p8 = p6--;";
	cout << "\np8"; p8.Print();
	cout << "\np6"; p6.Print();
	cout << endl;



	return 0;
}
반응형