重载运营商订单

时间:2011-10-04 17:48:42

标签: c++ operator-overloading

  

可能重复:
  Operator Overloading in C++ as int + obj
  Operator overloading

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

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

我可以像这样执行添加:

point + 10

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

10 + point

我是否需要重载另一个运算符才能提供此功能?

4 个答案:

答案 0 :(得分:3)

您通常希望重载全局运算符:

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

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

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

然后让ctor从浮点创建一个Point:

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

在这种情况下,向Point添加一个float将使用ctor将float转换为Point,然后使用重载的operator +将这两个Point添加到一起。

答案 1 :(得分:2)

作为免费功能:

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

答案 2 :(得分:2)

鉴于现有Point& Point::operator+=(float other),请添加以下两个免费函数:

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

答案 3 :(得分:1)

课外:

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