22.以op=代替op

前言

 
对于c++而言,运算符operator+、operator=、operator+=之间并没有任何关联,对于其他运算也同理,如果你期望使用效果犹如内置类型,那你必须自己实现。


实现

 
为了确保operator+=与operator+之间存在正常的关系,建议根据operator+=实现出operator+:

1
2
3
4
5
6
7
8
9
class Rational {
public:
...
Rational& operator+=(const Rational& rhs);
Rational& operator-=(const Rational& rhs);
};
const Rational operator+(const Rational& lhs,const Rational& rhs){
return Rational(lhs) += rhs;//返回值优化
}

这种方法将赋值形式作为了成员函数,维护性得到了提高,同时避免了operator+成为了类的友元。(提高封装性)


效率

 
赋值的效率高于单独形式,原因在于赋值返回引用,无需构建析构临时对象。
但需要记住,提供赋值的同时必须提供标准形式,以方便用户能够作出权衡,因为标准形式的可读性高于赋值,在大多数情况下,可读性很重要。
作为一个库编写者,必须给客户提供这两种操作。但作为使用者,我们必须明白赋值的效率更高。