当我的对象在C++的右侧时,如何重载操作符*?

prg*_*lop 3 c++ overloading operator-keyword

我想实现"operator*"重载INSIDE我的类,所以我将能够执行以下操作:

Rational a(1, 2), b;
b = 0.5 * a; // b = 1/4
Run Code Online (Sandbox Code Playgroud)

请注意,b在右侧,是否有办法 "Rational"类中执行此类操作?

Oli*_*rth 8

不可以.您必须定义operator*为免费功能.当然,您可以根据第二个参数的成员函数来实现它.


MSa*_*ers 7

是:

class Rational {
  // ...
  friend Rational operator*(float lhs, Rational rhs) { rhs *= lhs; return rhs; }
};
Run Code Online (Sandbox Code Playgroud)

注意:这当然是滥用friend关键字.它应该是一个自由的功能.

  • @JonMcClung:滥用是因为这是_friend声明_,它也具有_definition_函数。通常,朋友声明不是定义,并且该定义出现在类之外。但是这里的问题是,在技术上是否可行,C ++语法确实允许这样做。 (2认同)
  • @MSalters 像这样的友元定义很常见,建议用于运算符重载 (2认同)