Guidelines:
• If the operator results in an lvalued expression
– the return type should be returned by referenced
– for example -= results in an lvalued expression
• If the operator results in an rvalued expression
– the return type should be returned by reference  if
possible but usually we are “stuck” returning by value
(causing the copy constructor to be invoked when we
use these operators..........)
– for example - results in an rvalued expression