C++箴言:声明为非成员函数时机

来源:本站
导读:目前正在解读《C++箴言:声明为非成员函数时机》的相关信息,《C++箴言:声明为非成员函数时机》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C++箴言:声明为非成员函数时机》的详细说明。
简介:本文给大家分享了C++箴言:声明为非成员函数时机。

如果你设计一个用来表现有理数的类,允许从整数到有理数的隐式转换看上去并非不合理。这的确不比 C++ 的内建类型从 int 到 double 的转换更不合理(而且比 C++ 的内建类型从 double 到 int 的转换合理得多)。在这种情况下,你可以用这种方法开始你的 Rational 类:

class Rational { public: Rational(int numerator = 0, // ctor is deliberately not explicit; int denominator = 1); // allows implicit int-to-Rational // conversions int numerator() const; // accessors for numerator and int denominator() const; // denominator - see Item 22  private: ... }; 

你知道你应该支持类似加,乘等算术运算,但是你不确定你应该通过成员函数还是非成员函数,或者,非成员的友元函数来实现它们。你的直觉告诉你,当你拿不准的时候,你应该坚持面向对象。你知道这些,于是表示,有理数的乘法与 Rational 类相关,所以在 Rational 类内部为有理数实现 operator* 似乎更加正常。与直觉不符,将函数放置在它们所关联的类的内部的主意有时候与面向对象的原则正好相反,但是让我们将它放到一边,来研究一下将 operator* 作为 Rational 的一个成员函数的主意:

class Rational { public: ...  const Rational operator*(const Rational& rhs) const; }; 

(如果你不能确定为什么这个函数声明为这个样子——返回一个 const by-value 的结果,却持有一个 reference-to-const 作为它的参数。)

这个设计让你在有理数相乘时不费吹灰之力:

Rational oneEighth(1, 8); Rational oneHalf(1, 2);  Rational result = oneHalf * oneEighth; // fine  result = result * oneEighth; // fine 

但是你并不感到满意。你还希望支持混合模式的操作,以便让 Rationals 能够和其它类型(例如,int)相乘。毕竟,很少有事情像两个数相乘那么正常,即使它们碰巧是数字的不同类型。

提醒:《C++箴言:声明为非成员函数时机》最后刷新时间 2024-03-14 00:58:41,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C++箴言:声明为非成员函数时机》该内容的真实性请自行鉴别。