As I read in books and in the web, in C++ we can overload the "plus" or "minus" operators with these prototypes (as member functions of a class Money
):
const Money operator +(const Money& m2) const;
const Money operator -(const Money& m2) const;
and for the assignment operator with:
const Money& operator =(const Money& m2);
Why use a reference to a Money object as a return value in the assignment operator overloading and not in the plus and minus operators?
Returning a reference from assignment allows chaining:
a = b = c; // shorter than the equivalent "b = c; a = b;"
(This would also work (in most cases) if the operator returned a copy of the new value, but that's generally less efficient.)
We can't return a reference from arithmetic operations, since they produce a new value. The only (sensible) way to return a new value is to return it by value.
Returning a constant value, as your example does, prevents move semantics, so don't do that.
Because operator+
and operator-
don't act on this object, but return a new object that is the summation (or subtraction) of this object from another.
operator=
is different because it's actually assigning something to this object.
operator+=
and operator-=
would act on this object, and are a closer analog to operator=
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With