Форум программистов, компьютерный форум CyberForum.ru

Перегрузка операторов - C++

Восстановить пароль Регистрация
 
Native
0 / 0 / 0
Регистрация: 26.09.2010
Сообщений: 11
03.02.2011, 12:02     Перегрузка операторов #1
Я новичек в С++, столкнулась с перегрузкой операторов. Подскажите пожалуйста
в чем принципиальное отличие таких обьявлений:
Имя_класса& operator+(Имя_класса& , Имя_класса& )
и такого: Имя_класса operator+(Имя_класса& , Имя_класса& )?
Почему в некоторых случаях передается ссылка на оператор?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2011, 12:02     Перегрузка операторов
Посмотрите здесь:

перегрузка операторов C++
C++ перегрузка операторов
C++ Перегрузка операторов
Перегрузка операторов C++
C++ Перегрузка операторов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
03.02.2011, 13:14     Перегрузка операторов #2
Native, у тебя не правильно написано
и по ссылке не "передается оператор", а возвращается значение по сслыке.
например когда перегружаешь = надо чтобы менялся объект, для которого вызывается оператор
поэтому надо писать
C++
1
const ob& operator= (const ob& copyOb);
или для []
C++
1
ob& operator[] (const SomeType& copyOb);
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
03.02.2011, 13:55     Перегрузка операторов #3
Native, при сложении ссылку возвратить не получится (в большинстве случаев, если действительно у вас операция "+" будет означать сложение), поскольку зачастую чтобы сложить два объекта, нужно создать временный объект, в который положится сумма этих двух переданных объектов. Поскольку объект создан внутри функции, т.е. является локальным, ссылку на него возвратить нельзя (ведь по выходу из функции он будет уничтожен), поэтому нужно возвращать значение, т.е. при выходе сначала объект будет скопирован в место вызова функции, а затем уничтожен.
А вот += может возвращать и ссылку, потому как результатом операции будет уже существующий объект, находящийся слева от += (т.е. по сути *this), вот ссылку на него и надо возвращать.
Native
0 / 0 / 0
Регистрация: 26.09.2010
Сообщений: 11
03.02.2011, 23:11  [ТС]     Перегрузка операторов #4
Спасибо огромное! Извините за некорректность вопроса
Yandex
Объявления
03.02.2011, 23:11     Перегрузка операторов
Ответ Создать тему
Опции темы

Текущее время: 17:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru