effectiveC++(十九)(四)

2010-12-26 23:21:41 · 作者: · 浏览: 6393
nt -> rational

而这个语句不行:

result = 2.operator*(onehalf);      // 不会转换
                                    // int -> rational

第一种情形操作的是列在函数声明中的一个参数,而第二种情形不是。

尽管如此,你可能还是想支持混合型的算术操作,而实现的方法现在应该清楚了:使operator*成为一个非成员函数,从而允许编译器对所有的参数执行隐式类型转换:

class rational {

  ...                               // contains no operator*

};

// 在全局或某一名字空间声明,
// 参见条款m20了解为什么要这么做
const rational operator*(const rational& lhs,
                         const rational& rhs)
{
  return rational(lhs.numerator() * rhs.numerator(),
   &nbs