正文
1. 将需要隐式类型转换的函数声明为成员函数会出现问题
使类支持隐式转换是一个坏的想法。当然也有例外的情况,最常见的一个例子就是数值类型。举个例子,如果你设计一个表示有理数的类,允许从整型到有理数的隐式转换应该是合理的。在C++内建类型中,从int转换到double也是再合理不过的了(比从double转换到int更加合理)。看下面的例子:
1 class Rational { 2 3 public: 4 5 Rational(int numerator = 0, // ctor is deliberately not explicit; 6 7 int denominator = 1); // allows implicit int-to-Rational 8 9 // conversions10 11 int numerator() const; // accessors for numerator and12 13 int denominator() const; // denominator — see Item 2214 15 private:16 17 ...18 19 };
你想支持有理数的算术运算,比如加法,乘法等等,但是你不知道是通过成员函数还是非成员函数,或者非成员友元函数来实现。你的直觉会告诉你当你犹豫不决的时候,你应该使用面向对象的特性。有理数的乘积和有理数类相关,所有将有理