1

大家好,看看我的代码我正在尝试制作一个程序,要求您以克为单位输入第一个值,第二个值是千克,然后通过重载 + 运算符将千克转换为克,但它不起作用,为什么

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

Fval并且Sval是整数,你要加起来。就这么简单。

编辑:

你的代码很可疑。

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,比如说X exand X wye,你可以说

X zed = ex + wye;

并得到正确的结果。如果 typeX不仅仅是一个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 回答