다음을 통해 공유


증가 및 감소 (C++)

각각의 두 종류 때문에 증가 및 감소 연산자는 특별 한 범주에 속합니다.

  • Preincrement 및 postincrement

  • Predecrement 및 postdecrement

오버 로드 된 연산자 함수를 작성 하는 경우 접두사에 대해 별도 버전을 구현 하 고 버전 이러한 연산자의 후 위 유용 합니다.둘 사이 구분 하기 위해 다음 규칙 준수: 운영자의 접두어 양식을 정확 하 게 같은 방식으로 다른 단항 연산자입니다; 선언 후 위 폼 추가 형식의 인수를 받아들이는 int.

[!참고]

증가 또는 감소 연산자의 후 위 폼에 대 한 오버 로드 된 연산자를 지정 하는 경우 추가 인수 형식 이어야 합니다 int. 기타 형식 지정 오류가 발생 합니다.

다음 예제에서는 접두사가 정의 및 후 위 증가 및 감소 연산자에 대 한 방법을 보여 줍니다 있는 Point 클래스:

// increment_and_decrement1.cpp
class Point
{
public:
   // Declare prefix and postfix increment operators.
   Point& operator++();       // Prefix increment operator.
   Point operator++(int);     // Postfix increment operator.

   // Declare prefix and postfix decrement operators.
   Point& operator--();       // Prefix decrement operator.
   Point operator--(int);     // Postfix decrement operator.

   // Define default constructor.
   Point() { _x = _y = 0; }

   // Define accessor functions.
   int x() { return _x; }
   int y() { return _y; }
private:
   int _x, _y;
};

// Define prefix increment operator.
Point& Point::operator++()
{
   _x++;
   _y++;
   return *this;
}

// Define postfix increment operator.
Point Point::operator++(int)
{
   Point temp = *this;
   ++*this;
   return temp;
}

// Define prefix decrement operator.
Point& Point::operator--()
{
   _x--;
   _y--;
   return *this;
}

// Define postfix decrement operator.
Point Point::operator--(int)
{
   Point temp = *this;
   --*this;
   return temp;
}
int main()
{
}

다음 함수 헤드를 사용 하 여 전역 파일 범위에서 동일한 연산자를 정의할 수 있습니다.

friend Point& operator++( Point& )      // Prefix increment
friend Point& operator++( Point&, int ) // Postfix increment
friend Point& operator--( Point& )      // Prefix decrement
friend Point& operator--( Point&, int ) // Postfix decrement

형식의 인수가 int 는 후 위 증분 형태의 나타냅니다 또는 감소 연산자 사용 되지 않습니다 일반적으로 인수를 전달 합니다.일반적으로 0 값을 포함 합니다.그러나이 다음과 같이 사용할 수 있습니다.

// increment_and_decrement2.cpp
class Int
{
public:
    Int &operator++( int n );
private:
    int _i;
};

Int& Int::operator++( int n )
{
    if( n != 0 )    // Handle case where an argument is passed.
        _i += n;
    else
        _i++;       // Handle case where no argument is passed.
    return *this;
}
int main()
{
   Int i;
   i.operator++( 25 ); // Increment by 25.
}

이러한 명시적인 호출이 아닌 다른이 값을 전달 하려면 앞의 코드와 같이 증가 또는 감소 연산자를 사용 하는 구문은입니다.이 기능을 구현 하는 간단한 방법을 추가/연산자를 오버 로드 하는 (+=).

참고 항목

참조

연산자 오버로드