Я знаю, что при перегрузке оператора назначения копирования мы возвращаем объект по ссылке на цепочку назначений вместе, но я не могу сделать то же самое, то есть вернуться по ссылке при перегрузке оператора-?
Вы можете. Но это определенно не лучше, чем создать новый объект и вернуть разницу в этом. В конце концов, зачем менять значение передаваемого объекта?
Также обратите внимание на разницу в использовании, вместо этого оператор -
работает как x = x-y
(обычно это -=
). из z = x-y
, где z
- это новый объект, в котором вы хотите сохранить результат вычитания.
Здесь я перегружен с использованием функции друга. Я изменил объект c1 и вернул его по ссылке. но я получаю ошибки, так что мы можем сделать что-то подобное?
Ваше объявление функции друга не соответствует перегруженному определению оператора, что является причиной ошибки.
Да, конечно. Однако обратите внимание, что перегрузка вашего оператора относится к -=
, а не к -
.
Изменить объявление в классе: (удалить ключевое слово friend
)
Cents& operator-(const Cents& c1, const Cents &c2);
Соответствующее определение -
перегрузка, работает как -=
:
Cents& operator-(const Cents& c1, const Cents& c2)
{
c1.m_cents -= c2.m_cents;
return c1;
}