Отличие между перегрузкой оператора для классов и глобальных функций заключается в том, как определяется оператор:
- Перегрузка для классов осуществляется через функцию-член, определённую внутри класса. 1 В этом случае операторная функция принимает на один аргумент меньше, чем перегрузки глобального оператора. 1 Для бинарного оператора одним аргументом будет объект *this, а другой будет принят в качестве аргумента. 1 Для унарного будет использоваться только *этот объект. 1
- Перегрузка для глобальных функций осуществляется через глобальную функцию, которая не является другом класса. 1 В этом случае глобальная двоичная операторная функция будет принимать два аргумента, а глобальная унарная операторная функция — один аргумент. 1
Выбор между этими подходами зависит от того, как оператор будет использоваться: если он модифицирует объект, то его стоит делать членом класса, а когда оператор выполняет действие с другим объектом и возвращает другой объект (или ничего не возвращает), то лучше написать его как независимую функцию. 5