대표적인 단항 연산자
- 1 증가 연산자 : ++
- 1 감소 연산자 : --
++pos;
-> operator++()의 함수형태로 오버로딩 되어 있다.
멤버함수인 경우 operator++()의 형태, 전역함수의 경우 operator++(Point& ref)의 형태이다.
아래와 같이 구현되어있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Point& operator++() { xpos+=1; ypos+=1; return *this; } Point& operator--() { xpos-=1; ypos-=1; return *this; } | cs |
-> this는 객체 자신의 포인터 값을 의미한다. 즉, 위 함수에서 객체 자신을 참조형으로 반환한다. 그렇기 때문에 객체 자신의 복사본을 만들어 반환하게 된다. 그래서 아래의 형태도 가능하게 된다.
++(++pos);
괄호 안의 ++연산자를 먼저 한후 자신의 참조형을 반환, 참조된 값을 통해 다시 ++연산자를 진행하게 된다.
정리하면, 위 예제의 operator++함수에서 객체 자신을 참조할 수 있는 참조값을 반환하는 이유는 일반적인 ++연산자처럼 아래의 연산이 가능하게 함이다.
++(++pos), --(--pos)
* ++와 --연산자는 피연산자의 위치에 따라 '전위증가'와 '후위증가로 나뉘게 된다. 연산자 오버로딩 할 경우 이를 구분할 수 있는 방법은?
-> C++에서는 전위 및 후위 연산에 대한 해석 방식에 대해 다음과 규칙을 정해놓고 있다.
++pos -> pos.operator++();
pos++ -> pos.operator--(int);
--pos -> pos.operator--();
pos-- -> pos.operator--(int);
즉, 키워드 'int'를 통해 후위 연산에 대한 함수를 전위연산에 대한 함수와 구분하고 있다. 여기서 int는 단지 후위연산을 구분하기 위한 목적으로 선택된 것일뿐, int형 데이터를 인자로 전달하는 것과는 전혀 상관이 없다.
[참고자료]
윤성우 열혈 C++ 프로그래밍 10-2 단항 연산자의 오버로딩
'Software Development > C, C++' 카테고리의 다른 글
[C++] 배열 인덱스 연산자 오버로딩 [] (1) | 2019.01.12 |
---|---|
[C++] 연산자 오버로딩 - 디폴트 대입 연산자 (0) | 2019.01.12 |
[C++] 연산자 오버로딩 (0) | 2019.01.03 |
[C++] 가상 상속 (Virtual Inheritance) (0) | 2019.01.02 |
[C++] 오버라이딩과 가상함수 (0) | 2019.01.01 |