您的位置:首页 > 编程语言 > C语言/C++

C++ 若所有参数皆需类型转换,请为此采用非成员(non-member)函数

2018-03-21 09:31 453 查看
20180314 C++ 若所有参数皆需类型转换,请为此采用非成员(non-member)函数
并不是令所有的classes支持隐式类型转换都是个不好的主意,建立数值类型时就是个意外。
假设这样创建你的有理数类(Rational class):
class Rational{
public:
  Rational(int numerator = 0,   //构造函数可以不为explicit;
           int denominator = 1);  //允许int-to-Rational隐式转换
  int numerator() const;        //分子(numerator)和分母(denominator)的
  int denominator() const;       //的访问函数(accessors)。
private:
  ... 
};

当想支持混合式算数运算,可让operator* 成为一个non-member函数,即允许编译器在每一个实参身上执行隐式类型转换:

class Rational{
  ...

};
const Rational operator*(const Rational& lhs,
                         const Rational& rhs)
{
    return Rational(lhs.numerator() * rhs.numerator(),
                    lhs.denominator() * rhs.denominator());
}

Rational oneFourth(1,4);
Rational result;
result = oneFourth * 2;   //没问题
result = 2 * oneFourth;   //当然,也没问题

在开发中,无论何时都应该尽量避免使用友元(friend)函数。因为使用友元函数所带来 的麻烦远大于其使用价值。

注意:若想为某个函数的所有参数(包括被this指针所指的那个隐喻参数)进行类型转换,那么这个函数必须是非成员的(non-member)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐