类运算符重载

时间:2011-05-21 17:53:37

标签: c++ class overloading

这是一个非常基本的运算符重载问题。 说我有这样的课......

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 + =?

,代码是否相同?

3 个答案:

答案 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

这两个运算符是相关的 - 并且通常可以相互实现 - 但它们具有不同的语义,因此不能具有相同的实现。