|
1 / 1 / 0
Регистрация: 15.02.2011
Сообщений: 43
|
|
Перегрузка operator<<17.02.2011, 00:10. Показов 9661. Ответов 40
Метки нет (Все метки)
Доброе время суток.
Есть очередная задачка - перегрузить оператор вывода таким образом: Есть три объекта разных классов - А а, В в, С с; Нужно, чтобы при записи а << b << c; изменялось значение некоторых членов всех трех классов, ну грубо говоря, пусть там есть по одному члену типа float и пусть при такой записи вывода произойдет нечто вроде b.f+=0.2*c.f; a.f+=0.8*c.f; А при любой другой записи - (b<<c<<a, c<<b<<a, b<<a<<c, a<<b<<a) - пусть проводится просто вывод каких-нибудь членов класса, не суть важно. Или даже ошибка за неправильный порядок членов в выводе. Можно ли это вообще сделать, а если нельзя, то что требуется от этих трех объектов? Точно известно, что речь про перегрузку вывода, а не перегрузку сдвига. С перегрузкой я знаком, но вызывает затруднение именно такой порядок и вообще, наличие 3х объектов, о которых идет речь.
0
|
|
| 17.02.2011, 00:10 | |
|
Ответы с готовыми решениями:
40
Перегрузка operator= Перегрузка operator<< |
|
1 / 1 / 0
Регистрация: 15.02.2011
Сообщений: 43
|
|
| 18.02.2011, 21:58 [ТС] | |
|
Господа, получил небольшое облегчение задачи по теме.
Реализуйте класс, описывающий работу фильтра. Перегрузите операции ввода-вывода так, чтобы при прохождении жидкости через фильтр (операция вида СОСУД << ФИЛЬТР << КОЛБА) в фильтре оставалось какое-то количество воды, заданное заранее в конструкторе в виде процента от исходного объема. Сдается мне, что это похоже на токенайзер какой-то - разбор выражения типа... Или может быть даже просто сделать перегрузку оператора ввода, а три больших слова - открытыми членами класса и выводить их. Ну и параллельно менять описываемый объем. Или это слишком просто?
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 18.02.2011, 22:02 | |
|
Так речь-то всё-таки идёт о перегрузке именно оператора <<, с выводом никак не связанной.
0
|
|
|
1 / 1 / 0
Регистрация: 15.02.2011
Сообщений: 43
|
|
| 19.02.2011, 23:53 [ТС] | |
|
Но ведь написано "перегрузить операторы ввода-вывода"...
0
|
|
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
| 19.02.2011, 23:55 | |
|
Selendis, почитайте обсуждение на прошлой странице о <<
0
|
|
|
1 / 1 / 0
Регистрация: 15.02.2011
Сообщений: 43
|
|
| 20.02.2011, 00:01 [ТС] | |
|
alex_x_x: А разве тут не идет речь о том, чтобы перегрузить <<, который уже был перегружен для basic_ios?(ну или где там cout определяются)
Плюс тут еще есть ввод, который наверное тоже куда-то в тему будет...
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||
| 20.02.2011, 00:11 | ||||||
|
Selendis, вы, похоже, не совсем понимаете суть перегрузки. Перегрузить оператор, который уже где-то перегружен, не получится. Везде, где оператор << не перегружен, он будет делать то, что должен делать согласно функциональности, определяемой ядром языка - сдвигать свой левый операнд на столько позиций влево, сколько указано во втором операнде. Вы либо используете его AsIs, либо перегружаете, давая ему новый функционал. То, что он уже где-то перегружен как оператор, отвечающий за вставку данных в поток, нам фиолетово. Мы, как и разработчики стандартного класса работы с потоками, просто перегружаем этот оператор языка так, чтобы он выполнял заданный функционал. По сути таким же образом, каким мы определяем оператор << для своего класса, передавая ему в качестве левого операнда экземпляр класса std::ostream, мы можем определить практически любой бинарный оператор, и радоваться, только потом, когда кто-то будет нашим классом пользоваться, нас проклянёт за такие выкрутасы.
Добавлено через 4 минуты Вот пример того, как делать можно, но не нужно, чтобы вы убедились, что то, что оператор << называют оператором вывода в поток, определили разработчики стандартных классов работы с потоками. Определи они для этой цели другой оператор, кто знает, может данный код был бы вполне уместен)))
0
|
||||||
|
1 / 1 / 0
Регистрация: 15.02.2011
Сообщений: 43
|
|
| 20.02.2011, 00:13 [ТС] | |
|
Ох, вроде бы немного понимал.
Выражусь вот так - прав ли я в том, что здесь требуется перегрузить не просто оператор <<, а скорее оператор <<, точно получающий левым операндом std::ostream? Ведь грубо говоря, я могу ограничить понятие оператора вывода, определив его как сдвиг, получающий ostream в качестве левого операнда... И говоря о перегрузке именно оператора вывода, я всего лишь имею в виду то, что у него один операнд определен. Или же я кругом не прав, и здесь правые и левые операнды уже указаны в задании, а для трех штук(СОСУД << ФИЛЬТР << КОЛБА) мне придется пользоваться его какой-нибудь ассоциативностью?
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 20.02.2011, 00:18 | |
|
Полагаю, в задании ничего о выводе не сказано, а чётко сказано, что есть три объекта трёх классов, и их определённая последовательность в выражении a << b << c; задаёт определённое поведение программы. Вам же вроде на первой странице отписали несколько вариантов такой реализации, но вы почему-то ухватились за потоки и никак их не отпускаете, хотя в задании о них ничего не говорится.
0
|
|
|
1 / 1 / 0
Регистрация: 15.02.2011
Сообщений: 43
|
|
| 21.02.2011, 00:36 [ТС] | |
|
Ладно, не буду усложнять себе судьбу)
Уважаемый alex_x_x, а как в Вашем коде сделать так, чтобы грубо говоря "a.value = c.value*b.value", причем только в случае "a<<b<<c" ? Насколько я понял, там логично кейс для c будет позже кейса для a и обратиться к a уже никак нельзя. И в то же время, операция мне нужна только в случае a<<b<<c. В голову лезут только вариант сделать глобальные экземпляры класса, вариант статических переменных и вариант сделать операцию явно опосля, достав какую-нибудь логическую переменную из менеджера.
0
|
|
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|||||||||||
| 23.02.2011, 19:26 | |||||||||||
0
|
|||||||||||
|
zykis
|
|||||||
| 22.03.2014, 17:40 | |||||||
|
|||||||
|
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 312
|
||
| 22.04.2016, 09:30 | ||
|
0
|
||
| 22.04.2016, 09:39 | |
|
0
|
|
|
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 312
|
||
| 22.04.2016, 14:34 | ||
|
<- цитата с сайта http://cpp.com.ru/shildt_spr_po_c/05/0505.html
0
|
||
|
Модератор
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,236
|
|||||||
| 22.04.2016, 14:38 | |||||||
1
|
|||||||
|
Комп_Оратор)
|
||||||
| 22.04.2016, 14:41 | ||||||
|
Тема поднята из глубин небытия, но поскольку всё "новое", это хорошо забытое "старое" хочется что-то изваять. Вот тут тема о вычитании строк:
Написать перегрузку оператора "минус" для строк Поэтому чуть переделав тот исходник попробую пошутить в этой теме) Я конечно против перегрузок с неожиданными побочными эффектами, но ради интереса:
![]() зы прошу извинить за то что не в тему последнего поднятого вопроса
0
|
||||||
|
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 312
|
|||||||
| 22.04.2016, 17:33 | |||||||
К тому же твой вариант цикла будет весьма интересно работать, если параметром arr будет строка=).
0
|
|||||||
| 22.04.2016, 17:40 | |
|
0
|
|
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|||||||
| 22.04.2016, 17:44 | |||||||
|
Что выведет эта программа?
0
|
|||||||
|
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 312
|
||||||
| 23.04.2016, 12:20 | ||||||
|
при помощи этого кода выяснилось, что разница хоть и не большая - но есть.
0
|
||||||
| 23.04.2016, 12:20 | |
|
Помогаю со студенческими работами здесь
40
Перегрузка operator= Перегрузка operator[][][]
Перегрузка operator new Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|