[英]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;
}
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;
}
运算符重载的工作方式是,如果你有一个 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 ex
和X 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.