Как перегружать оператор +?

206
03 января 2022, 19:40

Как лучше перегружать оператор +: через friend функцию внутри класса или как inline функцию вне класса?

Класс шаблонный.

Answer 1

Не совсем понятно такое ограничение количества вариантов. Friend-функцию можно определять и внутри, и снаружи класса. Определение снаружи класса может быть как inline, таки и не inline. Почему вдруг речь идет только о "friend функции внутри класса"? Почему при определении вне класса речь идет именно об inline?

Тем не менее:

Во-первых, без разницы. Во-вторых, зависит от того, нужен ли вам friend-доступ. Нужен или нет?

Обычно предпочитают friend-вариант даже тогда, когда friend-доступ не нужен, просто потому, что он позволяет поместить все определение перегружаемой функции внутрь класса. Кто-то считает, что в таком виде код выглядит удобочитаемее. Это так, для небольших функций.

Большие функции, по моему мнению, лучше определять вне класса. И здесь вопрос о том, будет ли функция inline и будет ли функция friend определяется посторонними факторами, специфичными для каждой функции, которые вы в своем вопросе не упомянули.

К "шаблонности" класса все это не имеет никакого отношения. С тем только замечанием, что в таком случае есть одна тонкость: объявить нешаблонную перегрузку в таком случае можно только как friend прямо в определении шаблона класса. (см. здесь)

READ ALSO
Вытаскивание текстур из игр на LibGDX

Вытаскивание текстур из игр на LibGDX

Здравствуйте, хотел бы узнать, как вытащить текстуры

236
Перегрузить оператор + в обе стороны

Перегрузить оператор + в обе стороны

Как перегрузить оператор + так, чтобы можно было складывать мой класс с другим типом в обе стороны?

81
Количество знаков после запятой c++

Количество знаков после запятой c++

Нужно вывести результат деления двух чисел с точностью до 10^-9

100