C ++中基元类型的运算符重载

时间:2016-10-01 16:33:08

标签: c++ operator-overloading operators

在C ++中,如果你有一个Foo类,并且你希望Foo的用户能够写:

Foo x;
x += 3;

,您只需创建Foo的成员函数Foo& operator+=(int rhs)即可。如果你想写:

Foo x;
int y = 3;
y += x;

,你不能通过编写Foo的成员函数来实现这一点,而是必须编写一个外部函数,通常必须将其声明为Foo的朋友。

对于未来版本的C ++而言,使用Foo成员函数int& operator+=(int &lhs, Reversed)编写可以有多难,其中Reversed是一个空类,其唯一目的是区分运营商的两个版本?

如果这样做,它可能会消除新代码中friend关键字的绝大部分用途。

1 个答案:

答案 0 :(得分:2)

您实际上可以定义这样的运算符,因为您可以为内置类型重载+=

int& operator+=(int &lhs, Foo &rhs) {
  lhs += rhs.somefield;
  return lhs;
}

另一方面,除了为所有可能的运算符编写重载函数之外,您还可以提供一个允许class Fooint的隐式强制转换的函数:

class Foo {
  ... somefield;

  operator int() {
    return (int)somefield;
  }
};