条款 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; // OK
result = 2 * oneHalf; // ERR
const Rational operator*(const Rational& lhs, const Rational& rhs)
{
return Rational(lhs.numerator() * rhs.numerator(),
lhs.denominator() * rhs.denominator())
}
第一种方式中由于不存在接受一个 int 和 Rational 作为参数的 non-member operator*, 因此失败。