重载postfix运算符++

Sla*_*zer 4 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 '++' 
}
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*our 12

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

friend void operator++(Number&);      // prefix
friend void operator++(Number&, int); // postfix
Run Code Online (Sandbox Code Playgroud)

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

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
}
Run Code Online (Sandbox Code Playgroud)