这是一个非常基本的运算符重载问题。 说我有这样的课......
class xy
{
public:
double x, y;
XY(double X, double Y) { x = X; y = Y;}
XY operator+(const XY & add) const {
return XY(this->x + add.x, this->y + add.y);
}
XY & operator+=(const XY & add) const {?}
}
}
我希望operator + = do做它应该做的事情(你知道,添加到x和y的当前值)。对于operator +和operator + =?
,代码是否相同?答案 0 :(得分:5)
怎么可能一样?他们做了不同的事情。
如果您不关心优化,可以在+=
运营商实施中使用+
:
XY operator + (const XY& right) const
{
XY left(*this);
left += right;
return left;
}
答案 1 :(得分:3)
是的,执行添加操作(坚持+=
运算符),并返回对自身的引用。哦,这不是const
方法。
XY & operator+=(const XY & add) {
this->x += add.x;
this->y += add.y;
return *this;
}
答案 2 :(得分:3)
没有。通常,operator+
将结果存储在新对象中并按值返回,而operator+=
将右侧添加到*this
并通过引用返回*this
。
这两个运算符是相关的 - 并且通常可以相互实现 - 但它们具有不同的语义,因此不能具有相同的实现。