条款 24:若所有参数皆需类型转换,请为此采用 non-member 函数
Declare non-member functions when type conversions should apply to all parameters.
class Rational{public:Rational(int numerator = 0, int denominator = 1);int numerator() const;int denominator() const;}class Rational{public:...const Rational operator* (const Rational& rh) const;}Rational oneEighth(1, 8);Rational oneHalf(1, 2);result = oneHalf * 2; // OKresult = 2 * oneHalf; // ERRconst Rational operator*(const Rational& lhs, const Rational& rhs){return Rational(lhs.numerator() * rhs.numerator(),lhs.denominator() * rhs.denominator())}
第一种方式中由于不存在接受一个 int 和 Rational 作为参数的 non-member operator*, 因此失败。
