Qaupot Blog
Software Engineering, Trip

303. 1항 연산자 - 증감 연산자

🕐 Wed, 19 Feb 2014 09:00:00 GMT 🕓 Tue, 31 Aug 2021 12:58:00 GMT

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 를 사용합니다.

이 블로그는 개인 블로그입니다. 게시글은 오류를 포함하고 있을 수 있지만, 저자는 오류를 해결하기 위해 노력하고 있습니다.
게시글에 별도의 고지가 없는 경우, 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 라이선스를 따릅니다.

This blog is personal blog. published posts may contain some errors, but author doing efforts to clear errors.
If post have not notice of license, it under creative commons Attribution-NonCommercial-NoDerivatives 4.0.