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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
Choopa
17 / 17 / 0
Регистрация: 03.04.2011
Сообщений: 89
#1

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

07.04.2011, 06:11. Просмотров 2508. Ответов 11
Метки нет (Все метки)

Расскажите пожалуйста про перегрузку в классе:
всегда ли в ней должен быть return и что в нём должно быть
её типы(void, int, и т.д.) и почему ставят * или &
как вызывать двойные операторы (++, --, +=, и т.д.)
можно ли сделать её к пустому типу? Напр. конструкция b+;
И можно ли её сделать наоборот? Напр. конструкция +b;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
07.04.2011, 07:40     Перегрузка операторов #2
Choopa, Операторы разделяются на унарные и бинарные. Унарные это например & - асперанд, * - дереференс, -> - оператор стрелочка, ++ инкремент и т.п.
Бинарные - +, -, *, /, +=, *= и т.п.
Логично что бинарные в основном должны возвращать либо ссылку на объект класса либо объект класса.
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
07.04.2011, 07:52     Перегрузка операторов #3
Добавлю, что нельзя создавать новые операторы (какой-нибудь оператор #), а так же менять параметры существующих операторов: унарность на бинарность и наоборот (вроде a!b, a-), префиксность на постфиксность и наоборот (*a на a*).
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
07.04.2011, 13:20     Перегрузка операторов #4
silent_1991, А так же нельзя перегружать некоторые операторы.
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
07.04.2011, 13:22     Перегрузка операторов #5
ForEveR, в частности, ".", "::", "?:")))
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
07.04.2011, 13:24     Перегрузка операторов #6
silent_1991, sizeof забыл (ежели я не ошибаюсь он все же оператор).
Ну и в X-ах можно будет определять свои литералы.
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
07.04.2011, 13:27     Перегрузка операторов #7
ForEveR, хм... даже мысли никогда не было его перегружать
Choopa
17 / 17 / 0
Регистрация: 03.04.2011
Сообщений: 89
08.04.2011, 06:33  [ТС]     Перегрузка операторов #8
А можно примерчик на c++ унарного оператора, если не трудно
Mr.X
Эксперт С++
3040 / 1685 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
08.04.2011, 07:03     Перегрузка операторов #9
Вообще-то функция перегрузки оператора отличается от обычной только тем, что может вызываться не только по имени, но и через выражение, состоящее в применении встроенного оператора к объектам, которые ваша функция способна воспринять как свои аргументы (поэтому конструкция b+ не проканает, так как встроенный унарный оператор плюс является префиксным).
Все остальное, т.е. тип возвращаемого значения и действия вашей функции целиком зависят от вашей фантазии и той функциональности, которую вы хотите ей придать.
Если же вы хотите, чтобы ваша перегрузка действовала подобно встроенному оператору, только для новых типов, то имеет смысл использовать для этого канонические формы перегрузки, приведенные в учебниках.
Choopa
17 / 17 / 0
Регистрация: 03.04.2011
Сообщений: 89
13.04.2011, 05:30  [ТС]     Перегрузка операторов #10
Я тут почитал лекции и нашёл что вот так работает
Class d{
d & operator ++(){}
}
main()
{
d x;
++x;
}
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.04.2011, 08:11     Перегрузка операторов #11
Ииии? Существует префиксаная версия инкремента/декремента, ничего нового вы не "создали".
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2011, 10:12     Перегрузка операторов
Еще ссылки по теме:

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

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
13.04.2011, 10:12     Перегрузка операторов #12
Цитата Сообщение от Choopa Посмотреть сообщение
Напр. конструкция b+;
Такой конструкции не существует.
Yandex
Объявления
13.04.2011, 10:12     Перегрузка операторов
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru