|
Полярный
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
||||||
Не понимаю манипуляторы. Как они работают?08.02.2012, 11:51. Показов 2333. Ответов 16
Метки Манипуляторы (Все метки)
Здравствуйте. Столкнулся с непониманием манипуляторов. Вот код:
Да и вообще не понятно, скажем как работает cout.precision(int) Прошу объяснить, спасибо.
0
|
||||||
| 08.02.2012, 11:51 | |
|
Ответы с готовыми решениями:
16
Find, replace Как они работают? Подскажите что такое классы и как они работают |
|
Полярный
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
|||||||
| 08.02.2012, 12:09 [ТС] | |||||||
0
|
|||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||
| 08.02.2012, 12:23 | ||
|
dimcoder, для потоков вывода определён оператор <<, который принимает указатель на функцию. В теле он просто-напросто вызывает эту функцию и возвращает результат её выполнения.
Добавлено через 41 секунду
1
|
||
|
Полярный
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
|||||||
| 08.02.2012, 12:32 [ТС] | |||||||
0
|
|||||||
| 08.02.2012, 12:36 | |||||||||||||
ostream& и возвращает ostream& Для интереса попробуй сделать в том же коде
Добавлено через 2 минуты
1
|
|||||||||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|||||||
| 08.02.2012, 12:42 | |||||||
|
dimcoder, реализация gcc:
1
|
|||||||
|
Полярный
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
||||||||
| 08.02.2012, 12:52 [ТС] | ||||||||
|
silent_1991,
villu, спасибо за ответы, но пока остались вопросы. http://liveworkspace.org/code/... bb26138fdd Откуда здесь 1? И как работает функция setw(int) из iomanip? Как создать такой манипулятор?
0
|
||||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||||||||
| 08.02.2012, 13:00 | ||||||||||||
|
dimcoder, тут тоже, скорее всего, вызывается версия с void *, потому что ваш "манипулятор" не соответствует сигнатуре функции, указатель на которую принимает остримовский оператор <<, т.е. манипулятора здесь не получается.
Добавлено через 2 минуты dimcoder, вот так, если сильно не хочется каскадной записи:
1
|
||||||||||||
|
Полярный
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
|||||||||||
| 08.02.2012, 13:49 [ТС] | |||||||||||
|
Спасибо большое за хороший пример. Вроде понял.
Остался вопрос, как реализован setprecision(int)
Я так понимаю класс содержащий setprecision является другом cout'a? Или все таки можно описать класс чтобы можно было делать так:
Хотя врядли получиться, ведь приоритет слева направо и сначала вызовется cout.operator<< (multiplyByTen). Я прав?
0
|
|||||||||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
| 08.02.2012, 13:52 | ||||||
1
|
||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||
| 08.02.2012, 14:11 | ||||||
|
Ой говнокод говнокодистый какой-то... Но работает.
Главное - не пытаться ничего выводить прямо в multiply_by_ten, минуя поток... А то неприятно выводить что-то по нулевому адресу, считая его адресом потока
2
|
||||||
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
|
| 08.02.2012, 14:18 | |
|
А как сделать, чтобы на 10 умножались все последующие числа, а не только первое?
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 08.02.2012, 14:31 | |
|
I.M., а вот так вряд ли получится сделать, тут, скорее всего, действительно надо быть другом потока...
0
|
|
|
Полярный
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
|||
| 08.02.2012, 14:31 [ТС] | |||
Не, ну после вырезки из iomanip от forever - ваш код для меня - луч солнца в темном лесу.http://liveworkspace.org/code/... cf9a7c5073
0
|
|||
|
|
||||||
| 08.02.2012, 14:35 | ||||||
|
I.M., создавать свой класс производный от ostream и подсовывать его операторам <<, которые придется перегрузить. ну а внутри класса уже скидывать в cout.
т.е. cout<<multi(10)<<1<<2<<3; где то я делал пример с шифрованием потока. шас поищу. Добавлено через 2 минуты ВОТ ссылка на манипулятор криптующий поток с ключом char*, криптуется весь последующий вывод, до тех пор пока криптование не будет отменено
1
|
||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|||||||||||
| 08.02.2012, 15:50 | |||||||||||
|
AzaKendler, мне тоже в голову пришёл вариант с "операторными скобками", но без наследования. Сейчас попробую накидать...
Добавлено через 6 минут
Добавлено через 7 минут Ну и под конец кретиффчег - манипулятор, применяющий к последовательности значений (вплоть до "закрывающего" манипулятора) некоторую функцию (правда получилось не совсем так, как хотелось, ну да ладно):
2
|
|||||||||||
| 08.02.2012, 15:50 | |
|
Помогаю со студенческими работами здесь
17
Виртуальные функции, таблицы виртуальных методов, как они работают? Постигаю c++ и не могу в здешние циклы, а ещё в тип char кто знает как они работают подскажите Что такое "bool " и #include <algorithm>? Кто знает , как они работают ? Энкодеры. Как они работают?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
|
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|