Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск

Кто сейчас на форуме
Сейчас посетителей на форуме: 1, из них зарегистрированных: 0, скрытых: 0 и гостей: 1

Нет

[ Посмотреть весь список ]


Больше всего посетителей (7) здесь было Сб Июн 17, 2017 3:57 pm
Самые активные пользователи за неделю


Дружественная перегрузка операторов

Предыдущая тема Следующая тема Перейти вниз

Дружественная перегрузка операторов

Сообщение автор Ярослав в Сб Сен 23, 2017 11:19 am

Бинарные операторы (все, кроме операторов присваивания =, +=, -= ... и квадратных скобок) принято перегружать с помощью дружественной отдельно стоящей функции:

Код:
class MyClass {
   ...
public:
   friend MyClass operator + (const MyClass &a, const MyClass &b);
   friend MyClass operator - (const MyClass &a, const MyClass &b);

   friend bool operator == (const MyClass &a, const MyClass &b);
}

Дружественная перегрузка означает:

• оператор будет реализован отдельно стоящей функцией, не принадлежащей классу
• в функцию передаются два экземпляра нашего класса
• эта функция дружественная классу, поэтому имеет доступ к его приватным полям

Основная выгода дружественной перегрузки — в симметричности, a и b выглядят равноправными параметрами. К тому же если вы передаёте их по конст ссылке, у вас исчезает соблазн модифицировать объекты a и b в процессе.
avatar
Ярослав
Admin

Posts : 346
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Дружественная перегрузка операторов

Сообщение автор Ярослав в Сб Сен 23, 2017 11:23 am

Операторы вроде сложения должны возвращать новый объект нашего класса, не изменяя ни a, ни b. Обычно это делают так:

Код:
MyClass operator + (const MyClass &a, const MyClass &b) {
   MyClass sum; // заводим новую локальную переменную
   sum.внутренние поля = a.внутренние поля + b.внутренние поля // нашли сумму
   return sum; // вернули копию нашего объекта
}

Чтобы эта схема работала, MyClass должен адекватно поддерживать операцию копирования: если стандартный конструктор копирования работает недостаточно хорошо, его надо перегрузить.
avatar
Ярослав
Admin

Posts : 346
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения