I have overloaded the prefix version of operator ++. How can I overload the postfix version if the overloaded function is NOT a member of my class*?
#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 '++' 
}
*I understand if it is a member of the class, I can use the dummy int parameter to distinguish them.
Non-member overloads also use a dummy int parameter to distinguish them:
friend void operator++(Number&);      // prefix
friend void operator++(Number&, int); // postfix
Note that some people might expect these to emulate the behaviour of the built-in operator by returning, respectively, the new and old values:
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
}
                        I believe (I can't test this out at the moment) you use the dummy int as a second parameter to the operator overload, i.e.
void operator++(Number& fst, int /*dummy*/){
    fst.number=fst.number+1;
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With