类运算符重载

Class Operator Overloading

本文关键字:重载 运算符      更新时间:2023-10-16

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

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 {?}
    }
}

我希望运算符+=对它应该做的事情做(你知道,加上x和y的当前值)。运算符 + 和运算符 += 的代码不是相同的吗?

怎么

可能一样?他们做不同的事情。

如果您不关心优化,则可以在+运算符实现中使用+=

XY operator + (const XY& right) const
{
    XY left(*this);
    left += right;
    return left;
}

是的,执行 add 操作(坚持使用 += 运算符),并返回对自身的引用。 哦,这不可能是一个const的方法。

XY & operator+=(const XY & add) {
   this->x += add.x;
   this->y += add.y;
   return *this;
}

No.通常,operator+将结果存储在新对象中并按值返回,而operator+=将右侧添加到*this并通过引用返回*this

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