2012-06-27 5 views
0

'-'후위 연산자를 오버로드하려고합니다. 이 코드를 가지고 : 다음 main에 나는이 함수 호출이 C++ 오버로드 '-'후위 연산자

class Counter 
{ 
private: 
    int count; 
public: 
    Counter() 
    { count = 0; } 
    Counter(int c) 
    { count = c; } 

    void setCount(int c) 
    { count = c; } 
    int getCount() 
    { return count; } 

    int operator--() 
    { 
     int temp = count; 
     count = count - 1; 
     return temp; 
    } 
}; 

:

Counter a; 
a.setCount(5); 
cout << a-- << endl; 

이 나에게이 오류 제공 : error: no ‘operator--(int)’ declared for postfix ‘--’, trying prefix operator instead

을하지만이 같은 operator-- 함수를 호출 할 때, 그것은 단지 잘 작동합니다 :

cout << a.operator--() << endl; 

무엇을 제공합니까? 잘 작동해야합니다.

+1

때문에'a.operator -()'--a''에 해당합니다. – chris

답변

8

과부하 후 처리 연산자의 경우 함수 서명에 dummy int 인수를 지정해야합니다. 즉, operator--(int)도 있어야합니다. 당신이 정의한 것은 접두사 감소 연산자입니다. 자세한 내용은 FAQ을 참조하십시오.

+2

그리고 OP가 왜 궁금해하는 이유는 접미사와 접두어를 구별 할 수있는 방법이 필요했기 때문입니다. (어쩌면 그것은 명백했다) –

+0

고마워, 나는 그것에 대해 잊어 버렸다. @BenjaminLindley Gotcha, 그래서 그것은 하나의 규칙을 따르는 것이고, 감사합니다! – rcorrie

+0

@BenjaminLindley 포스트 픽스 및 접두사 버전을 정의하는 표준인가요? 왜 나는 접두사 버전을 가진 int 매개 변수로 연산자 ++를 정의 할 수 없다는 것을 의미합니까? –

8

접미사 연산자는 접두사 연산자와 구별하기 위해 인수로 int을 사용합니다.

후위 :

int operator--(int) 
{ 
} 

접두사 :

int operator--() 
{ 
}