C++重载+=算符
我有一门课:C++重载+=算符,c++,operator-overloading,C++,Operator Overloading,我有一门课: class MyClass{ double a; double b; double c; double d; public: MyClass(double _a, double _b, double _c, double _d){ a = _a; b = _b; c = _c; d = _d; } MyClass operator+=(const M
class MyClass{
double a;
double b;
double c;
double d;
public:
MyClass(double _a, double _b, double _c, double _d){
a = _a;
b = _b;
c = _c;
d = _d;
}
MyClass operator+=(const MyClass & rhs){
a += rhs.a;
b += rhs.b;
c += rhs.c;
d += rhs.d;
return this;
}
MyClass operator+(MyClass & rhs){
MyClass newOne(a+rhs.a,b+rhs.b,c+rhs.c,d+rhs.d);
return newOne;
}
}
我是这样用的:
MyClass my1(1., 2., 3., 4.);
MyClass my2(2., 3., 4., 5.);
MyClass my3(2., 4., 6., 8.);
my2 += my3;
my1 += my2;
这个很有效,但当我这样使用它的时候
my1 += my2 += my3;
我得到了不同的答案。
我怎样才能把括号中的表达式作为第一个计算呢?例如:
(my1 + my2) + my3 == my1 + (my2 + my3)
目前还不清楚你希望在这份声明中得到什么结果
my1 += my2 += my3;
这句话相当于
my1 += ( my2 += my3 );
根据C++标准5.17赋值和复合赋值算子< /P> 1赋值运算符=和复合赋值运算符 从右向左分组
有效的运算符定义如下所示MyClass & operator +=( const MyClass & rhs )
{
a += rhs.a;
b += rhs.b;
c += rhs.c;
d += rhs.d;
return *this;
}
考虑到你的代码中有几个打字错误。例如,在运算符(而不是this)中,必须返回*this或类定义应在右大括号后以分号结束
至于这个表达
(my1 + my2) + my3 == my1 + (my2 + my3)
那么,完全不清楚你想要实现什么。您的类没有定义的比较运算符 您的代码有几个问题: 首先,运算符+=应返回对该值的引用 它修改,而不是复制;返回类型应为 我的班级& 运算符+应该引用const,而不是 非常量;不能将临时文件绑定到对的引用 非常量 传统上,运算符+将是一个自由函数,沿 行:
MyClass operator+( MyClass const& lhs, MyClass const& rhs )
{
MyClass results( lhs );
results += rhs;
return results;
}
这样做是为了确保应用相同的转换
到+两侧的操作数;自从你上课以来
不支持任何转换,这没关系,但是
养成一个好习惯。MyClass操作符+=constMyClass&rhs{应该是MyClass&operator+=constMyClass&rhs{.return this;should是return*this;return this;will not compile.我得到了错误的答案你得到了什么结果?Op+=应该是RL-associative.根据你的建议进行更改很有帮助,非常感谢。但是我如何解决第二个问题?我应该过载吗?返回类型不应该是const!@NeilKirk Oops.你是对的,我输入错误。修复了。