[C++ STL] 연산자 오버로딩 - 단항 연산자(++, --)

박남호·2022년 11월 22일
0

오버로딩이 가능한 단항 연산자는 !, &, ~, *, +, -, ++, --가 있고 이번 포스팅에서는 ++, --에 대해 알아보겠다.

#include <iostream>
using namespace std;
class Point 
{
	int x;
	int y;
public:
	Point(int _x = 0, int _y = 0) : x(_x), y(_y) {}
	void Print()const { cout << x << ',' << y << endl; }
	void operator+(Point arg) 
	{
		cout << "operator+() 함수 호출" << endl;
	}

	const Point& operator++()
	{
		++x;
		++y;
		return *this;
	}
	const Point& operator++(int pDummy)
	{
		Point pt(x, y);
		++x;
		++y;
		return pt;
	}
};

int main()
{
	Point p1(2, 3), p2(2, 3);
	Point tResult;
	
	tResult = ++p1;
	p1.Print();
	tResult.Print();

	tResult = p2++;
	p2.Print();
	tResult.Print();
	return 0;
}

코드를 보면 알수있듯이 전위 연산은 void operator++(){} 후위 연산은 void operator++(int pDummy){} 멤버 함수를 호출하며 둘을 구분 짓기 위해 후위 연산자에 int pDummy가 들어간다. 코드 때문에 조금 헷갈리는 부분이있는데 Point pt(x, y) 여기서 새로운 객체를 생성하였고 ++x, ++y 연산을 한다. 즉 지금 가지고 있는 값을 pt를 생성하며 복사를하고 p2 객체의 값은 증가를 시켜주는 것이다. 그리고 반환할때는 pt를 반환하기 때문에 증가 이전의 값을 반환하게 되는것이다.

profile
NamoPark

0개의 댓글