我重载了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 参数来区分它们。
答案 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;
}