Вопрос 1: «свободная функция» не может получить доступ к закрытым переменным-членам класса Currency. Если вам нужно использовать эти переменные для выполнения операции +=
, то вы должны сделать оператор членом класса или сделать не являющийся членом оператора другом класса (см. Пример ниже). Кроме того, они очень похожи.
Вопрос 2: Возврат lhs
. Это позволяет объединять вызовы, например a += b += c
.
.
class Currency
{
friend Currency& operator+=(Currency &lhs, const Currency &rhs);
};
Currency& operator+=(Currency &lhs, const Currency &rhs)
{
}
То же, что и
class Currency
{
public:
friend Currency& operator+=(Currency &lhs, const Currency &rhs)
{
}
};