Причина в том, что это лучшее решение.
Почему бы вы бы предпочли, чтобы функция была методом-членом?Чтобы он мог получить доступ ко всем закрытым членам, которые ему не нужны?
Спросите себя почему класс имеет методы получения и установки, если вы предпочитаете не использовать их ?В основном вы предлагаете обходить их без всякой причины.
Делая эту бесплатную функцию намного лучше, сохраняйте инкапсуляцию, минимизируя объем кода, который может получить доступ к внутренним объектам класса.
это идиоматическое решение в C ++, как описано здесь или здесь .
Основное правило всегда должно быть таким: размещайте как можно больше функциональных возможностей класса в функциях, не являющихся членами.Чем меньше кода может видеть внутреннее содержимое класса, тем меньше кода рискует сломаться при изменении реализации этого класса.
В операторе .
нет ничего особенно "объектно-ориентированного".Его использование не обязательно делает ваш код «более ООП» (или «лучше», если на то пошло).