Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

Расскажите пожалуйста про перегрузку в классе:
всегда ли в ней должен быть return и что в нём должно быть
её типы(void, int, и т.д.) и почему ставят * или &
как вызывать двойные операторы (++, --, +=, и т.д.)
можно ли сделать её к пустому типу? Напр. конструкция b+;
И можно ли её сделать наоборот? Напр. конструкция +b;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2011, 06:11
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Перегрузка операторов (C++):

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this - C++
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в зависимости от чего зависит агрумент при...

Перегрузка операторов >>, << - C++
Помогите перегрузить операторы ввода и вывода в классе Time. (Я совсем-совсем новичек...)Заранее всем спасибо.class Time { friend...

Перегрузка операторов +=, -=, *= - C++
Доброе время суток! Начал писать одно лабораторную роботу,с начала показалось что она крайне проста,но потом возникли непредвиденные...

[c++] Перегрузка операторов - C++
Для заданных A = (A – a1, A, A + a2) и B = (B – b1, B, B + b2) Найти сумму A + B = (A + B – a1 – b1, A + B, A + B + a2 + b2); ...

Перегрузка операторов >>, <<, [] - C++
задача: написать перегруженные операторы &lt;&lt;, &gt;&gt; и для объекта массив деков символов. Объект дек реализован. проблема с квадратными...

Перегрузка операторов - C++
Столкнулся с проблемой при написании лабораторной по перегрузке операторов. Задание таково: описать класс, содержащий координаты отрезка,...

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

Перегрузка операторов - C++
Здравствуйте все. Начали проходить ООП, но хотелось бы узнать больше, подскажите пожалуйста кто знает хорошие книги с грамотным описанием...

Перегрузка операторов - C++
В общем задание следующее: Создайте класс chess (шахматы), в котором хранятся поля шахматной доски x, y (целые числа, лежащие в диапазоне...

Перегрузка операторов - C++
Создайте класс Fraction (обыкновенная дробь), в котором реализовать перегрузку: оператора суммирования дробей, оператора суммирования дроби...

Перегрузка операторов - C++
Решите пожалуйсто задачу: Разработайте программу, в которой реализована перегрузка оператора «^». Оператор «^» должен возводить...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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