본문 바로가기
스터디/C++

[ C++ ] 단항 연산자 오버로딩

by 알 수 없는 사용자 2019. 10. 10.

대표적인 단항 연산자는 ++ 와 -- 두 가지가 있다.

 

++temp

이렇게 단항 연산자를 사용하는데,

 

멤버함수로는

temp.operator++()로 표현이 될 것이고,

 

전역 함수로는

operator++(temp)가 될 것이다.

 

전역 함수의 경우는 피연산자가 모두 인자로 전달되므로, 이렇게 해석된다. 

 

그럼 먼저 단항 연산자 오버 로딩의 예시를 보자.

 

++ 연산자는 멤버 함수에 의한 오버 로딩이고

-- 연산자는 전역 함수에 의한 오버 로딩이다.

 

그럼 이때까지는 전위 증가를 구현했는데

단항 연산자의 후위 증가는 어떻게 구현을 할까?

 

구분하는 방법은 간단하다.

 

++temp는 temp.operator++() 

temp++은 temp.operator++(int)

        또는 operator++(temp, int)

 

--temp는 temp.operator--()

temp--은 temp.operator--(int)

        또는 operator--(temp, int)

 

이다. 여기서 int는 단지 후위 연산을 구분해주는 용도만 가진다.

 

그럼 이제 후위 증가의 예제를 보자.

 

후위 증가의 효과를 내는 방법은 복사본을 이용하는 것이다.

 

여기서 27행을 보면 temp라는 복사본을 만드는 것을 확인할 수 있다.

또한 const로 선언하여 값의 변경을 막았다.

그 이후에 멤버의 값을 더하고

30행에서 멤버의 값이 증가하기 이전에 만들어둔 복사본을 반환하고 있는 것을 확인할 수 있다.

 

즉, 멤버의 값이 증가하기 이전에 만들어둔 복사본 반환하는 것이 후위증가의 효과를 내는 방법이다.