Вопросы к Поиску с Алисой
Разница между перегруженными операторами-членами и внешними функциями в C++ заключается в том, как определяется функция оператора. metanit.com
Перегруженные операторы-члены определяются как нестатические функции-члены класса с именем operator@, где @ — символ(ы) оператора. habr.com В случае перегрузки унарного оператора эта функция не должна иметь параметров, а в случае бинарного должна иметь ровно один параметр. habr.com
Внешние функции определяются как отдельные функции, которые не являются членами класса. metanit.com Количество параметров такой функции совпадает с количеством операндов оператора. metanit.com Например, у функции, которая представляет унарный оператор, будет один параметр, а у функции, которая представляет бинарный оператор, — два параметра. metanit.com
Выбор между этими двумя подходами зависит от того, как оператор должен работать с объектами: если оператор модифицирует объект, то его стоит делать членом класса, а когда оператор выполняет действие с другим объектом и возвращает другой объект (или ничего не возвращает), то лучше написать его как независимую функцию. ru.stackoverflow.com