采用operator+=实现operator+优点:
- 降低维护成本,只需要维护operator+=即可;
- 如果operator+=为publicoperator+不需要称为class的友元;
- 通过模板的方式自动实现operator+版本;
- 提供两种操作方式,operator+=效率高,operator+易于撰写和维护;
-
operator+=比operator+效率高,可以通过返回值优化避免临时对象的构造和析构成本;
class Rational {
public:Rational(int numerator = 0, int denominator = 1) : _numerator(numerator), _denominator(denominator) {}double asDouble() const {return double(_numerator)/_denominator;}int numerator() const { return _numerator; }int denominator() const { return _denominator; }Rational& operator+=(const Rational& rhs) {_numerator += rhs.numerator();_denominator += rhs.denominator();return *this;}private:int _numerator;int _denominator;
};// const Rational operator+(const Rational& lhs, const Rational& rhs) {
// return Rational(lhs) += rhs;
// }
template <typename T>
const T operator+(const T& lhs, const T& rhs) {return T(lhs) += rhs;
}int main() {Rational a, b, c, result;result = a + b + c;result = a;result += b;result += c;return 0;
}