操作员订单过载

Overloading operator order

本文关键字:单过载 操作员      更新时间:2023-10-16

可能重复:
C++中的运算符重载为int+obj
操作员过载c++-faq

我有一个带有此运算符的Point对象:

Point operator +(float other) const {
  return Point(x + other, y + other, z + other);
}

我可以这样执行加法:

point + 10

但我不能按相反的顺序执行:

10 + point

是否有其他操作员需要过载才能提供此功能?

您通常想要重载全局运算符:

Point operator+(Point const &a, float b);
Point operator+(float a, Point const &b);

您可能只想使用一个过载,而不是两个过载:

Point operator+(Point const &a, Point const &b);

然后使用ctor从浮点创建一个点:

class Point { 
    public:
        Point(float);
};

在这种情况下,将浮点添加到点将使用ctor将浮点转换为点,然后使用重载运算符+将这两个点添加在一起。

作为一个免费函数:

Point operator+(float other, const Point &pt) {
    return pt+other;
}

给定一个现有的Point& Point::operator+=(float other),添加以下两个免费函数:

Point operator+(Point pt, float other) {
  return pt += other;
}
Point operator+(float other, Point pt) {
  return pt += other;
}

类外:

inline Point operator+(const float& other, const Point& pnt) { return Point(...); };