Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
||||||
1 | ||||||
Не понимаю манипуляторы. Как они работают?08.02.2012, 11:51. Показов 2048. Ответов 16
Метки Манипуляторы (Все метки)
Здравствуйте. Столкнулся с непониманием манипуляторов. Вот код:
Да и вообще не понятно, скажем как работает cout.precision(int) Прошу объяснить, спасибо.
0
|
08.02.2012, 11:51 | |
Ответы с готовыми решениями:
16
Для чего нужны сужающие преобразования как они работают и на сколько они важны? Find, replace Как они работают? Подскажите что такое классы и как они работают Виртуальные функции, таблицы виртуальных методов, как они работают? |
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
||||||
08.02.2012, 12:09 [ТС] | 3 | |||||
Не совсем. Пример конечно работает, но не понимаю почему. Ведь оно по моей идее должно преобразываться в
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
08.02.2012, 12:23 | 4 |
dimcoder, для потоков вывода определён оператор <<, который принимает указатель на функцию. В теле он просто-напросто вызывает эту функцию и возвращает результат её выполнения.
Добавлено через 41 секунду Нет, оно рассматривается компилятором так, как указал villu.
1
|
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
||||||
08.02.2012, 12:32 [ТС] | 5 | |||||
}{м, то есть прототип функции вызова функций для cout записан так:
0
|
08.02.2012, 12:36 | 6 | ||||||||||
ostream& и возвращает ostream& Для интереса попробуй сделать в том же коде
Добавлено через 2 минуты в файле ostream пользуемой библиотеки. в студии, например тут c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream
1
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||
08.02.2012, 12:42 | 7 | |||||
dimcoder, реализация gcc:
Это я как-то само собой подразумевал, иначе ответом на вопрос это не являлось бы.
1
|
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
||||||
08.02.2012, 12:52 [ТС] | 8 | |||||
silent_1991,
villu, спасибо за ответы, но пока остались вопросы. А если я не хочу каскадной записи? Вот допустим так: http://liveworkspace.org/code/... bb26138fdd Откуда здесь 1? И как работает функция setw(int) из iomanip? Как создать такой манипулятор?
У меня ошибку пишет.
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|||||||||||
08.02.2012, 13:00 | 9 | ||||||||||
dimcoder, тут тоже, скорее всего, вызывается версия с void *, потому что ваш "манипулятор" не соответствует сигнатуре функции, указатель на которую принимает остримовский оператор <<, т.е. манипулятора здесь не получается.
Тут уже другая схема, тут всё завязано на классах. Вот пример манипулятора, который выводит переданное ему число табуляций:
Добавлено через 2 минуты dimcoder, вот так, если сильно не хочется каскадной записи:
1
|
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
|||||||||||
08.02.2012, 13:49 [ТС] | 10 | ||||||||||
Спасибо большое за хороший пример. Вроде понял.
Остался вопрос, как реализован setprecision(int)
Я так понимаю класс содержащий setprecision является другом cout'a? Или все таки можно описать класс чтобы можно было делать так:
Хотя врядли получиться, ведь приоритет слева направо и сначала вызовется cout.operator<< (multiplyByTen). Я прав?
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
08.02.2012, 13:52 | 11 | |||||
1
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||
08.02.2012, 14:11 | 12 | |||||
Ой говнокод говнокодистый какой-то... Но работает.
Главное - не пытаться ничего выводить прямо в multiply_by_ten, минуя поток... А то неприятно выводить что-то по нулевому адресу, считая его адресом потока
2
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
|
08.02.2012, 14:18 | 13 |
А как сделать, чтобы на 10 умножались все последующие числа, а не только первое?
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
08.02.2012, 14:31 | 14 |
I.M., а вот так вряд ли получится сделать, тут, скорее всего, действительно надо быть другом потока...
0
|
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
|
08.02.2012, 14:31 [ТС] | 15 |
Не, ну после вырезки из iomanip от forever - ваш код для меня - луч солнца в темном лесу.
Правда потом х выведешь что нибудь другое "каскадом" http://liveworkspace.org/code/... cf9a7c5073
0
|
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
|
||||||
08.02.2012, 14:35 | 16 | |||||
I.M., создавать свой класс производный от ostream и подсовывать его операторам <<, которые придется перегрузить. ну а внутри класса уже скидывать в cout.
т.е. cout<<multi(10)<<1<<2<<3; где то я делал пример с шифрованием потока. шас поищу. Добавлено через 2 минуты ВОТ ссылка на манипулятор криптующий поток с ключом char*, криптуется весь последующий вывод, до тех пор пока криптование не будет отменено
1
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|||||||||||
08.02.2012, 15:50 | 17 | ||||||||||
AzaKendler, мне тоже в голову пришёл вариант с "операторными скобками", но без наследования. Сейчас попробую накидать...
Добавлено через 6 минут
Добавлено через 7 минут Ну и под конец кретиффчег - манипулятор, применяющий к последовательности значений (вплоть до "закрывающего" манипулятора) некоторую функцию (правда получилось не совсем так, как хотелось, ну да ладно):
2
|
08.02.2012, 15:50 | |
08.02.2012, 15:50 | |
Помогаю со студенческими работами здесь
17
Постигаю c++ и не могу в здешние циклы, а ещё в тип char кто знает как они работают подскажите Что такое "bool " и #include <algorithm>? Кто знает , как они работают ? Энкодеры. Как они работают? не понимаю как реализовать одновременную работу процессов, как сделать так, что бы они одновременно проверяли доступен ресурс или нет Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |