1항 연산자 - 증감 연산자
증감연산자 (++, --)는 1항 연산자의 대표적인 연산자 중 하나입니다.
#include <iostream>
class Number
{
private:
int val;
public:
Number(int val)
{
this->val = val;
}
int getValue(){ return val; }
Number& operator ++ ()
{
++val;
return *this;
}
Number& operator -- ()
{
--val;
return *this;
}
Number operator ++ (int)
{
Number copy(val);
val++;
return copy;
}
Number operator -- (int)
{
Number copy(val);
val--;
return copy;
}
};
int main(int argc, char** argv)
{
Number num(20);
int intNum = 20;
printf("%d\n", ++intNum);
printf("%d\n\n", --intNum);
printf("%d\n", intNum++);
printf("%d\n\n", intNum--);
printf("%d\n", (++num).getValue());
printf("%d\n\n", (--num).getValue());
printf("%d\n", num++.getValue());
printf("%d\n\n", num--.getValue());
return 0;
}
21
20
20
21
21
20
20
21
전위 증감 연산자는 자기 자신에 1을 먼저 늘리거나 줄인 뒤, 자기 자신을 다음 연산으로 보냅니다.
- 반환형은 자신의 자료형 레퍼런스가 되며, 반환 값은 자신의 인스턴스가 됩니다.
- 클래스 멤버로 선언할 경우, 1항 연산자이기 때문에 별도의 인수는 받지 않습니다.
후위 증감 연산자는 먼저 현재의 자신의 값을 임시 값으로 보내고, 자신의 값을 1을 늘리거나 줄입니다.
- 반환 값을 보내기 위한 return 을 호출하면 함수가 종료되므로, 그 이전에 자신의 값을 복사하고, 자신의 값을 조정한 후 복사해둔 값을 리턴합니다.
- 반환 값이 임시값이기 때문에 레퍼런스를 사용하지 않습니다.
후위 증감 연산자 역시 1항 연산자이기 때문에 클래스 멤버로 선언시 별도의 인수는 필요없지만,
전위 연산자와의 구분을 위해 이름없는 변수를 하나 포함합니다. 변수에는 관습적으로 int 를 사용합니다.