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)。
并不是令所有的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)。
相关文章推荐
- 条款24::若所有参数皆需类型转换,请为此采用 non-member 函数
- 条款24:若所有参数皆需要类型转换,请为此采用non-member函数(Declare non-member functions when type conversions should apply to all parameters)
- C++ - 使用非成员函数(non-member)处理函数的所有参数都需要类型转换
- Effective C++ Item 24 若所有参数皆需类型转换,请为此采用non-member函数
- 读书笔记_Effective_C++_条款二十四: 若所有参数皆需类型转换,请为此采用non-member函数
- 《Effective C++》学习笔记条款24 若所有参数皆需类型转换,请为此采用non-member函数
- effective C++ 条款 24:若所有参数皆需类型转换,请为此采用non-member函数
- Item 24: 若所有参数皆需要类型转换,请为此采用non-member函数
- Effective C++学习之-------若所有参数皆需类型转换,请为此采用non-member函数
- C++中 当函数所有参数都需要类型转换时 需要将其声明为non-member函数
- 读书笔记《Effective c++》 条款24 若所有参数皆需要类型转换,请为此采用non-member函数
- 读书笔记 effective c++ Item 24 如果函数的所有参数都需要类型转换,将其声明成非成员函数
- [EffectiveC++]item24:若所有参数皆需类型转换,请为此采用non-member函数
- Effective C++ 条款24 若所有参数皆需类型转换,请为此采用non-member函数
- 条款24:如果所有的参数都需要类型转换,那么请为此采用non-member函数
- 【24】若所有参数皆需类型转换,请为此采用non-members函数
- 条款24:若所有的函数参数可能都需要发生类型转换才能使用,请采用non-member函数
- 《Effect C++》学习------条款24 :若所有参数皆须类型转换,请为此采用non-member函数
- 条款24:若所有参数皆需类型转换,请为此采用non-member函数
- Effective C++ -----条款24:若所有参数皆需类型转换,请为此采用non-member函数