Используй функции-члены как основной выбор. Они обеспечивают лучшую инкапсуляцию, имеют прямой доступ к приватным данным и явно показывают, что операция принадлежит классу.
Выбирай дружественные функции в конкретных ситуациях:
параметр + объект.+, -, * как дружественные функции, чтобы обеспечить преобразование типов с обеих сторон. Например:
aComplex + aFloat // Работает с дружественной функцией
aFloat + aComplex // Требует дружественной функции для преобразования
Функции-члены преобразуют только правый операнд, но не левый.Для class Complex реализуй operator+ как дружественную функцию, чтобы поддержать оба варианта:
aComplex + aFloat
aFloat + aComplex
Но реализуй operator++ (инкремент) как функцию-член, поскольку он работает с одним объектом.
Главный принцип: максимизируй инкапсуляцию, сохраняя чистый и понятный синтаксис для пользователей класса.
Функции-члены класса должны быть выбором по умолчанию для операций класса, потому что они обеспечивают лучшую инкапсуляцию и имеют прямой доступ к приватным данным.
Новый — ещё не проверен сообществом
Вы