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