Главная » Просмотр файлов » Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004

Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791), страница 151

Файл №1160791 Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004) 151 страницаБ. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791) страница 1512019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 151)

Потоки 676 Потоки сегг и с!од о гносятся к одному и тому же получателю данных; опи различают- ся только буферизацией. Поток сои1 записывает туда же, что и в(с(ои( в С Я 21.8), в то время как сегг и с!од записывают туда же, куда и в((!егг, По мере необходимости прог- раммистт может создавать новые потоки (см. ~ 21.5). 21.2.2. Вывод встроенных типов Класс оя(теат определяет оператор «(<записать в») для управления выводом встро- енных типов: (етр1а(е <с!акя СЬ, с(акк Тг сЬат (гш(я<СИ» с!азя Ьак(с ои1геат: о!г(иа! риЫ!с Ьая(с (оз<СЬ, Тт> ( риЫик Ьаи!с ок(геатй арета(от«(яЬот( и); Ьаяс оя(геатй орега1от«(1п1 п); Ьаяс оз(геатйорета(ог«(!опал); Ьавсс оз(театй орега1ог«(ипя!дпег(яЬог( п); Ьая(с оз(геатйорега1ог«(ипи(илес(!п(п); Ьаз(с оя1геатй арета(о~ < (ипя(аале((!опи п); Ьаяс омгеат8 арета(от«Я1оа(/); Ьаз(с омтеатй арета(ог«((1оиЫе/); Ьпяс омгеатй арета(ог«(!опт((оиЫе/); Ьанс оя1геатй орега1ог«(Ьоо! п); Ьаяс оя1геатй орега1от«(сопи(оои(» р); //записать значен(ье дказо телк //записать с //р(О)..р(п-!) Ьанс ои1геатй ри1 (СЬ с); Ьов(с оя1геатй (ом1е (сопя1 СЬ* р, з1геатя!ее п); /! 1етр(а1е<с!азк СЬ, Вази Тг> Ьпи(с оз1геат<СЬ, Тт>й арета(ог«(Ьаяс оявеат<СЬ, Тт>й, СЬ); 1етр!а(с<с(аик СЬ, с1акя Тг> Ьаи!с оя(геат<СЬ, Тг>й орега1ог«(Ьанс оягеат -СЬ, Тт>й, сЬат); (етр(а(с<с!аяк ТГ Ьая(с оягтеатп<сьаг, Тг>й арета(ог«(Ьаяс ои1геат<сЬаг, Тг>й, сЬа((; 1етр1а(е<с!азк Тг> Ьаксс оя(геат<сЬат, Тт>й орета1ог«(Ьаяс оз(теат<сЬат, Тг>й, к(дпе((сЬат); (етр!а(е<с!аяи Тг> Ьаясс ок1геат<сЬаг, Тг>й орега1ог < (Ьаз(с ои1геат<сЬаг, Тт й,ипя(стпеь(сЬат); Подобным же образом вводится оператор «для записи оканчивающихся нулем символьных массивов: 1етр!а1е<с(аиз СЬ, с1аяи Тг> Функции ри1 () и юп1е () просто записывают символы.

Следовательно, оператор « для вывода может и не быть членом. Функции арета(ог«(), принимающие в качестве аргумента символьный операнд, можно реализовать как не-члены при помощи ри1(): 21.2. Вывод Ьая!с оь'!геат<СЛ, Тг>й арета!ог«(Ьая!с ояттеат<СЛ, Тг>й, сопя! СЛ*) !етр!ате<с1 аяя СЛ, с1аяя Тт> Ьая!с оя!теат<СЛ, Тт>й арета!ог«(Ьая!с оя!теат<СЛ, Т й, сопь! сЛат>) гетр1а!е<с1аяя Тг Ьая!с оя!теат<сдат, Тг>й арета!от«(Ьаьдс оя!сват<<Лат, Тг>й, сопя! сЛаг*) 1етр1а!е<с!аяя Тг> Ьая!с оя!геат<сЛат,Тг>йорега!от (Ьая!с оя!теат<сЛат,Тг>й,сопя!я!апедсЛат*1 !етр!а!е<с!аяя Тг Ьаис оя!теат<сЛат, Тт>йорета!ог«(Ьаас оя1теат<сЛат, Тг>й,<отья!ипя!епес!сЛа~ ), Операторы вывода для строк представлены в <я!Нп0>, см. ~20.3.15.

Функция орега1ог«() возвращает ссылку на оя1геат, для которого она вызывалась, чтобы к ней можно было применить другой орега1ог«(). Например: сегг« "х=" «х. где х относится к типу ш1, будет интерпретировано так: арета!ог«(сетг,'х=').арета!от«(х); В частности, это приводит к тому, что когда несколько сообщении выводится в одной инструкции, они выведутся в том порядке, как и предполагалось — слева направо. Например: оо!доа!(сЛатс) сои!«'ш! (' ' «с « ') =" «(п! (с) «< и'; ) ш1та!п () ( оа1 ('А'); оа1 ('Х'); Для реализации, пользующейся символами АЯС!1, эта программа выведет: 1и! ('А') = 65 ш!('2')= 90 Отметим, что символьный литерал имеет тип сЛаг Я 4.3.1), так что сои!«Х выведет символ Х, а не численное значение 90.

Значение типа Ьоо1по умолчанию выведется как 0 или 1. Если вам это не нравится, вы можете установить флаг форматирования Ьоо1а1рйа из <1отапьр> Я 21.4.6.2) и получить 1гие или~а!ее. Например: шгтаьп () ( сои! «!гие « ' ' «,1а1яе « '~р'; сои! '< Ьоо1а1рЛа; // аспольяоватпь для !те и 1а!яе 11 символьное представление сои! «!тие « ' ' «,1а1яе «<,п'; В результате выведется: 10 Ггие~а!яе 878 Глава 21, Потоки Точнее, боо1а1рйа гарантирует, что вы получите зависящее от национальных традиций представление значений типа Ьоо1. Установив мои (датские) национальные особешюсти Я 21.7), я получу; 1О вапд1/а1вд Форматирование чисел с плавающей точкой, вывод целых чисел в разной системе счисления и т.

д. рассматриваются в 2 21.4. Функция ов1геатзорега1ог < (сопв1 ио(с1*) выводит значение указателя в виде, соответствующем архитектуре машины. Например: (п1та1п () ( т1' р = пею (п1; сонг« "локальная память ' «Ьр « ', свободная память «р « ')а'; выведет в моей машине локальная память ОхЩеадО, свободная память Ох500с Другие системы обрабатывают значение указателей по-другому. 21.2.3. Вывод типов, определяемых пользователем Рассмотрим определяемый пользователем тип сотр1ех Я 11.3): с1авв сотр1ех ( ри611с: дои6!е геа1 () сопв1 ( гегигп ге, ) дои61е стаи () сопв1( ге1иги 1т; ) //... Оператор «для нового типа сотр1ех можно определить так: ов1геатй орега1огс< (ов1геат8 в, сотр1ех х) ( ге1игп и « ' (' «х.геа1 () « ',' «гдтад () « ')'; После етого таким оператором «можно пользоваться точно так же, как оператором «для встроенных типов.

Например: 1п1 та( п () ( сотр1ех х (1, 2), сои1 « "х = ' «х « '~п'; выведет 679 21.2. Вывод Определение операции вывода для типа, определяемого пользователем, не требует изменений в объявлении класса ок1геат. И это хорошо, поскольку ок1геат определен в <окггеат>, который пользователь не может и не должен изменять. Запрет на добавления к ок1геат также обеспечивает заьдиту от случайной порчи его структур данных и позволяет изменять реализацию оз1геат без влияния на пользовательские программы. 21.2.3Л. Виртуальные функции вывода Члены окбгеат не виртуальны. Операции вывода, которые может добавлять пользователь, не являются членами, поэтому онн тоже не могут быть виртуальными.

Одна из причин этого — стремление приблизиться к оптимальному быстродействию дл простых операпий, таких как помещение символа в буфер. Это место, где быстродействие является критическим и встраивание необходимо. Виртуальные функции используются только для достижения гибкости операций, имеющих дело с переполнением буфера сверху и снизу (5 21.бА). Тем пе менее, иногда программист хочет вывести объект, для которого известен только базовый класс. Поскольку точный тип не известен, правильность вывода не может быть достигнута просто пугем определения оператора «для каждого нового типа. Вместо этого в абстрактном базовом классе можно ввести виртуальную функцию вывода; с!акзМд Ьаке) риЬйс //." глггиа! ок1геатй ри1!ок1геатйз) сопк1= 0; //запись *1йдз в к оз1геатйорета1ог < )озсгеатйз, сопз1Му Ьакейг) 1 ге1иго г ри1 )з); // использует подходя скую фу нкцю ри1 О ) То есть ри1 !) является виртуальной функцией, которая гарантирует использование правильной операции вывода «.

С учетом этого мы можем написать: с!аззЯоте1уре риЫММу Ьаке( риЬЕг // фактическая фднкция вывода переопределлеьп Мд Ьазенри1 !) озсгеатй ри1 )рз1геатй з) сопк1, ); // использует заново определенный « ооЩ)сопзсМу Ьакей г, $отегдрейз) ( сои1«г«к; ) Таким образом виртуальная функция ри11) интегрируется в окружение, предоставленное ок1геат и « . Этот прием универсально полезен для введения операций, дей- Глава 21. Потоки 680 21.3. Ввод Ввод обрабатывается почти также, как и вывод.

Есть класс !яггеат, обеспечивающий оператор ввода» !<прочесть из») для небольшого набора стандартных типов. Функ- ция орега1ог» () может быть определена пользователем во вводимых им типах. 21.3.1. Потоки ввода По аналогии с Ьак!с оЫтеат Я 21.2.1) Ьаис и1геат определен в <!з1геат> !кото- рый содержит относящуюся ко вводу часть <!оз! еат>) следующим образом: 1етр!а1е <с!аяк СЬ, с!акк Тг= сбаг станк<СЬ» с!азк яЫсбаыс !Ыгеат Ыт1иа! рибдс Ьасйс !оя<СЬ, Тг' ( ри Ьдс: Ытгиа! -Ьаки !к1теат (), Базовый класс Ьаас !оз описан в () 21.2.1. В <!я1геатл> вводятся два стандартных потока ввода: с!л и юс!л: 1урейе~бак!с и1геат<сбат !кгтеат; 1уреде/Ьаис !к1геат<свсбат г> иякггеат; // стиндартний поток ввода символов сбт // стандартний поток ввода символов аебаг 1 !кгтеат с!и; ииггеат иып; Поток с!л считывает символы из того же источника, что и я1йл в С Я 21.8). 21.3.2.

Ввод встроенных типов Класс !з1геат вводит оператор» для типов, определяемых пользователем: 1етр!аге <с!аяз СЬ, с!акз Тт= сбат 1та11я<СЬ» с1аяз Ьак!с !зггеат: о!г1иа!риЫ!с бак!с !оя<СЬ, Тт' ( риЫ!с //- // форматированний ввод: ,//прочесть в и батс 1ягтеатй оретагог» Ьази. и1театй орега1ог» Ьаз!с 1кггеатй оретагог» (яботгй л); (!пгй п); (!опдй п); (ипк!!пей кбогсй и); (ипя!улей !п1й и); (ипиуп ел !опуй и) фоагйЯ; (доиЫейД (!опд с!оиЫей/); бак!с !кггеатй орега1ог» баксе !кгтеатй оретагот базис !з1геатй орега1ог» // прочесть в и // прочесть в/ Ьаис 1яггеотй арета!от» Ьак!с игтеатй орега1ог баис иггеатй орегагог» ствующих подобно виртуальным функциям, но с выбором во время выполнения, ос- нованным па втором аргументе операции.

88! 2!.3. Ввод //прочесть в Ь // прочесть значение //указателя вр Ьая!с !яггеатй орегагог» (Ьоо!й Ь); Ьаз!с ся!геатй орегасог» (оо!с!'й р); Функции ввода орега!ог определены в таком стиле: //(Т вЂ” тип, для которого объявлется ~збяат: орегагог» !яггеатй !я!геаспчорега!ог» (Тй гоаг) // пропустить символа-разделители, после чего ка к~аолибо образом // прочесть переменную типа Тв'!оаг' ге!игп 'гЬ!я; Поскольку оператор» пропускает символы-разделители, вы можете считать последовательность целых чисел, разделенных символами-разделителями, в вектор: // заполняет о, возвраи!ает число считанных чисел тт геас1 ьп!я (вес!огчспг>й о) сп!1=0; чоЬ!!е (!<о.я1ее () йй ст»оЯ !ч ь; ге!игп с; Нецелые числа на входе приведуг к тому, что ввод не выполнится, и цикл ввода за- кончится. Например, ввод 1 2 8 4 5.6 7 8.

приведет к тому, что геагт !и!з () считает пять символов: 12345 и оставит точку как символ для следующего считывания. Символы-разделители определяются, как стандартные символы-разделители в С (пробел, табуляция, новая строка, новая страница и возврат каретки) вызовом функции !зярасе (), определенной в <сс!уре> Я 20А.2). Наиболее распространенная ошибка при использовании потоков !з!гент — не заметить, что введено нето, что предполагалось, поскольку на входе был не тот формат.

Характеристики

Тип файла
DJVU-файл
Размер
10,02 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6372
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее