簡體   English   中英

C++ 重載 + 運算符不工作

[英]C++ overloading + operator not working

大家好,看看我的代碼,我正在嘗試制作一個程序,要求您按克輸入第一個值,第二個值是千克,然后通過重載 + 運算符將千克轉換為克,但它不起作用為什么

#include <iostream>
using namespace std;
class ADD{
private:
    int Fval;
    int Sval;
public:
    ADD(){
            cout << "WELCOME TO OUR PROGRAM"<<endl<<"PLEASE ENTER THE FIRST VALUE BY GRAMS :";
            cin >> Fval;
            cout << "PLEASE ENTER THE SECOND VALUE BY KILOGRAMS :"; cin >> Sval;
        }
    ADD operator+(ADD& add){
        add.Sval *= 1000;
        return add;
    }
    int plus(){
        return Fval+Sval;
    }
};
int main(){
    ADD a1;
    cout << "THE TOTAL VALUE = " << a1.plus() << " GRAMS";
}

沒效果看output

WELCOME TO OUR PROGRAM
PLEASE ENTER THE FIRST VALUE BY GRAMS :2
PLEASE ENTER THE SECOND VALUE BY KILOGRAMS :3
THE TOTAL VALUE = 5 GRAMS

這意味着 + 運算符不會將 3 乘以 1000 為什么?

那是因為你沒有調用operator +

您正在調用ADD::plus()

int plus(){
    return Fval+Sval;
}

FvalSval是整數,您將它們相加。 就這么簡單。

編輯:

你的代碼很可疑。

ADD operator+(ADD& add){
    add.Sval *= 1000;
    return add;
}

operator + ? 真的嗎? 另外,並不是說您正在修改參數,您不應該這樣做。 這不直觀。 如果你真的必須這樣做:

ADD operator+(const ADD& add){
    ADD ret;
    ret.Sval = add.Sval * 1000;
    return ret;
}

運算符重載的工作方式是,如果你有一個 X 類型的 object,就像這樣:

class X {
    public:
        X( int v ) : x( v ) {}
        int value();
        X operator +( const X& y ) {
            return X( value() + y.value() );
        }
    private:
        int y;
    };

現在,如果您聲明兩個X類型的對象,比如X exX wye ,您可以說

X zed = ex + wye;

並得到正確的結果。 如果類型X不止有一個int字段,效果會更有趣。 例如,您可以實現 2D 向量和點,然后執行加減向量的操作以獲取向量,向點加減向量以獲取點,以及減去點以獲取向量。

希望這會讓您對正在發生的事情有足夠的了解,以便能夠重組您的代碼以使其執行您想要的操作。 我可能有語法錯誤的細節,因為我輸入的是 go。

此外,我經常發現正確的做法是在需要二元運算符時聲明友元運算符:

friend operator + ( vector2D a, vector2D b );

...

inline operator + ( vector2D a, vector 2D b ) {
    return vector2D ( a.x + b.x, a.y + b.y );
}

暫無
暫無

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

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