1

こんにちはみんな私のコードを見てください。最初の値をグラム単位で入力するように求めるプログラムを作成しようとしています.2番目の値はキログラムで、オーバーロードされた + 演算子によってキログラムをグラムに変換しますが、なぜ機能しません

#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";
}

出力に効果がありません

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 を掛けないということです なぜ??

4

2 に答える 2

5

それは、あなたが電話していない 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;
}
于 2012-04-05T13:59:58.317 に答える
0

演算子のオーバーロードが機能する方法は、次のようにタイプXのオブジェクトがある場合です。

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

Xここで、タイプの2つのオブジェクト、sayX exとを宣言すると、次のようにX wye言うことができます。

X zed = ex + wye;

正しい結果が得られます。タイプXに単一のintフィールド以上のものがある場合、その効果はより興味深いものになります。たとえば、2Dベクトルとポイントを実装してから、ベクトルを加算および減算してベクトルを取得し、ポイントとの間でベクトルを加算および減算してポイントを取得し、ポイントを減算してベクトルを取得する操作を実装できます。

うまくいけば、これにより、コードを再構築して目的の動作を実現するために何が起こっているのかを十分に理解できるようになります。入力しているときに構文の詳細が間違っている可能性があります。

また、二項演算子が必要な場合は、フレンド演算子を宣言するのが正しいと思うことがよくあります。

friend operator + ( vector2D a, vector2D b );

..。

inline operator + ( vector2D a, vector 2D b ) {
    return vector2D ( a.x + b.x, a.y + b.y );
}
于 2012-04-05T14:12:49.727 に答える