重载postfix运算符++

时间:2013-07-26 16:14:32

标签: c++ overloading operator-keyword

我重载了operator ++的前缀版本。如果重载函数不是我的类*的成员,我怎么能重载postfix版本?

#include <iostream>
using namespace std;

class Number{
    int number;
public:
    Number(int inNr):number(inNr){}
    friend void operator++(Number& fst);
};

void operator++(Number& fst){
    fst.number=fst.number+1;
}

int main(){
    Number nr1(1);
    ++nr1;
    //nr1++; error: no 'operator++(int)' declared for postfix '++' 
}

*我理解如果它是该类的成员,我可以使用 dummy int 参数来区分它们。

2 个答案:

答案 0 :(得分:12)

非成员重载也使用虚拟int参数来区分它们:

friend void operator++(Number&);      // prefix
friend void operator++(Number&, int); // postfix

请注意,有些人可能希望通过分别返回新值和旧值来模拟内置运算符的行为:

Number& operator++(Number& fst) {
    fst.number=fst.number+1;
    return fst; // reference to new value
}

Number operator++(Number& fst, int) {
    Number old = fst;
    ++fst;
    return old; // copy of old value
}

答案 1 :(得分:1)

我相信(我目前无法测试)你使用dummy int作为运算符重载的第二个参数,即

void operator++(Number& fst, int /*dummy*/){
    fst.number=fst.number+1;
}