簡體   English   中英

重載postfix運算符++

[英]Overloading postfix operator ++

我重載了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參數來區分它們。

非成員重載也使用dummy int參數來區分它們:

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

請注意,有些人可能希望通過分別返回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
}

我相信(我現在無法測試它)你使用dummy int作為操作符重載的第二個參數,即

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM