오버로딩이 가능한 단항 연산자는 !, &, ~, *, +, -, ++, --가 있고 이번 포스팅에서는 ++, --에 대해 알아보겠다.
#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를 반환하기 때문에 증가 이전의 값을 반환하게 되는것이다.