effective c++ 条款24 declare non member functions when type conversions should apply to all parameters
文中这个例子好像不具一般性。
有些时候会需要让class支持隐士类型转换(一般来说这不是个好主意)。 比如说有理数Rational 这个class,
class Rational { public: Rational(int real=0, int img=0) { this->real = real; this->img = img; } private: int real; int img; };
我们希望这个类可以和int进行混合运算
Rational a(1,2); Rational b = a *2; Rational c = 2*a;
为了达到这样的目的,是不能把*声明称成员函数的。
要把它声明成一个non member函数
const Rational operator*(const Rational &lhs, const Rational &rhs) { return Rational(lhs.getReal() * rhs.getReal(), lhs.getImg * rhs.getImg()); // math logic may not be right just illustrate the problem }