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

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

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

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

О юк Э 2!.3.8 ф!данг<1) ге1игп *1Ьи; ггу ( Дике Гаскя<пит риг<СЬ»(уе1!ок()).риг(*1Ыя, 'Иия, 1Ыя — Я!!(), у),Га1!ек1()) яегя1а1е(ЬааЬгй; са1сй (.. ) ( Ьалк1!е огехкерггоп("Пик); ге1ш л '1Ь1к; В примере происходит много интересных вещей, Класс яеп! д (часовой) обеспечивает гарантию выполнения всего «префиксного» и «суффнксного» кода Я 21.3.8). Мы получаем локализацию потока вывода, вызывая функцию-член уе1!ос() Я 21.7) и извлекаем из локализации фасет пит ри1 при помощи ике ~псе! Я Г.З.!).

После этого мы обращаемся к надлежащей функции ри1(), которая и выполняет работу. Для несложного изготовления двух первых аргументов ри1(), мы конструируем итератор оя1геатЬиГ 11ега1ог из ок1геат Я 19.2,6) н неявно преобразуем ок1геат в его базовый класс 1оя Ьаяе (6 21.2Л). Функция ри1() возвращает свой аргумент, являющийся итератором вывода. Этот нтератор вывода извлекается из Ьая!с ок1геат, поэтому он является ок1геатЬиг 11ега1ог.

Следовательно, для проверки на сбой н для установки потока в нужное состояние нам доступнауа!!ег!() Я 19.2.6.1). Я не пользовался Лая Гасе1, потому что гарантируется, что станлартные фасеты (й ГА) имеются в каждой локализации. Если эта гарантия не выполняется, генерируется исключение Ьак! сак1($ Г.3.1). Функция ри1(), в свою очередь, вызывает виртуальную функцию а!о ри1(), а это может привести к исполнению пользовательского кода, так что орега1ог«() должен быть готов к обработке исключения, генерируемого замещенной Но ри1(). Кроме того, для некоторых символьных типов может отсутствовать аит ри1, поэтому ике )асе1() может сгенерировать я117сЬаг1 сак! (Г! Г.З 1).

Поведение «для встроенных типов, таких как НоиЫе, определено стандартом С«». Стало быть вопрос не в том, что лолжна делать функция !1апг(!е 1оехсер11он(), а в том, как она исполнит то, что предписано стандартом. Если в этом исключительном состоянии оя1геат установлен Ьаг(Ь(1 (э 21.3.6), исключение просто сгенерируется повторно. В противном случае обработка исключения сводится к установке состояния потока н продолжению исполнения.

В обоих случаях следует установить флаг Ьаг!Ь11 (э" 213.3): 977 Г.4. Стандартные фасеты 1етр!а1екс!аяя СИ, с!окв угь ооЫ Ьапс!!е лоехсер!!оп(зЫтЬазсс окзгеат<СЬ, угь& к) // вызывается из йока са!сб ( л/(кехсер1лот() й юя Ьаяесбаь/Ь!!) ( !г!/(в.яе1вгаге(!оя базесЬадЫЯ; ) сассб (...) () гбгош, // повторная генерация я яегяса1е(юя Ьаяесбас)6!1), //льожет сгенерировать биис !оях/ш!иге Потребовался блок 1гу, потому что зе1я1а1е() может сгенерировать Ьав/с (оз::/а/!иге 1ч 21.3.3, 5 21.3.б).

Однако, если в псключительноьк состоянии потока установлен Ьас(Ы1, оператор «обязан повторно сгенерировать исключение, приведшее к вызову Ьапс!!е ьоехсер1ьол() (а не просто Ьая!с юя:Да/!иге). Реализация операции «для встроенных типов, таких как с(оиЫе, должна непосредственно писать в буфер потока. При написании «для определяемого пользователем типа, часто удается избежать избыточной сложности путем выражения вывода определяемого пользователем типа в терминах вывола существуклцих типов Я Г.3.2).

Г.4.2.3. Ввод чисел При чтении из буфера потока Я 21.бА), поток ввода Ы1геат использует фасет пит уе1: сетр!а1е с1азя СЬ, с!авя 1л = 1яггеатби/ !1ега1ог<СЬ» с!аяк яЫ:пит уе!' риЫЫ !оса1ес/асе!( риб!!с 1урес!е/СЬ сбаг гуре; 1уреь/е/лл !1ег 1уре; ехр!!с!! клит уе1(в!хе 1 г=б); // чтение /6:е) в о с нслюльзованиель привил форлютнровония из я; // сообьцаель об ошибке пунлеж установки г: 1п уе1(1п Ь, 1л е, лоя базе& в, лок базелоз1а1ей г, Ьоорй о) сопя!; !пуе1(1п6,1пе, !ов Ьаяе& я, !оя баяесювгасей г, !олуйо) сот!, 1п уе1(1п Ь,!л е, !ов Ьаяей я, !оя Ьаве зояси1ей г, ипз/днес!ябог1й о) сот1; 1п уе1(/п Ь, /л е, лоя базе& в, !оя баке: юяга1ей г, ипв!унес! лл1& о) сопя!; 1л уе1(/и 6, 1п е, юя бизей з, )оя Ьаяе;лов!а!ей г, ипк!унес/!илу& о) сопз1; /п уе1(/п 6, 1п е, !ов Ьавей я, !оз баке иоя1а1ей г,/)оа1& о) сот1; 1л уе1(/п Ып е, !оя Ьакей я, юя базе; !ок1а1ей г, с!оиб!ей о) сопк1; /л уе1(1п Ь, 1п е, юз Ьикей я, !ов базе:лов!а!ей г, !опд ь!оиб!ей о) сопк1; )л уе1(/п Ып е, !ок Ьазей я, !ок баке: Пок1и1ей г, ооЫ*& о) сопя!; я!а!!с!оса!еяЫЫ; //иденплификаторфасетс Гу" Г.2, з !'.3, з" ГЗ !) рго1ес!есб -пит уе!(); //виртуальные'с)о функцшь Гсл.

В !яй!) 978 Приложение Г Локализация В основном, пит уе1организована так же, как и пит ри1(9 Г.4.2.2). Поскольку де1() читает, а не пишет, ей требуется пара итераторов ввода, а аргумент, обозначающий объект для чтения, является ссылкой. Для уведомления о состоянии потока устанавливается переменная г типа /ов1а1е. Если значение желаемого типа не удается прочитать, в г устанавливается/а!!Ы1; по достижении конца ввода в г устанавливается ео~Ь!1.

Оператор ввода воспользуется гдля принятия решения об установке состояния потока. Если ошибок не было, считанное значение присваивается в, в противном случае переменная в остается неизменной. Реализация гв1геат может выглядеть следующим образом: 1етр!а1е<с!авв СЬ, с/авв Т~ гвггеозпй вЫзЬавьс 1в1геазл<СЬ, лги:орега1ог >(доиЫеВ О) О си.

У 21,В.В веп1гу уиагч/(*1/ив). !/)(упаси) ( ве/в1а1е(/а!!Ы1); ге!игл '1Ыв, // все хороичо тша1е шаге = О; /в1геатЬи/ аегагог<С1г еов, иоиЫе ~Ы; 1гу ( иве ~асе1<пит уе1<СЬ»(уев!ос()).уе1(*1Ыв, сов, '1Ыв, в!иге, ~Ы); ) са1сЬ (...) ( Ьапс!!е 1оексер1/оп("1Ыв). // сн.

у" Г.4 2.2 ге1игп '1Ыв; з)(в1аге==у)) в1а1е==ео/Ь11) а = сЫ; // значение устонавливаетгя только // при успетнолз завершении уе1!) вегвга1е(в1а1е~! ге1игп '1Ыв; В случае ошибки функция ве1в1а1е() сгенерирует исклзочения, заданные для !в1геат (9 21.3.б). Определив фасет питрипс1, такой как Му рипс1из 9 ГА.2, мы можем читать с использованием несзандартной пунктуации. Например: оо!с!Я ( сои! « "формат А: "; Ы1!1; аоиЫе И1; сзп» зт» й1; // чтение с пспользованпелз сзпан/Зартногофорл~ата "!2345678" 1оса!е !ос(!оса!есс!авв!с(), лет Му риис!) селят Ьие(!ос); сои! « 'формат йг " 1п1!2; аоиЫеа2; 979 Г4, Стандартные фаоеты с/п» /1» л/2, // чтение с использованиемфорл/ата "12345 673' Чтобы прочитать более экзотические числовые форматы, нам придется заместить //а де/().

Например, мы могли бы определить пит де1 для чтения римок/их чисел типа ХХ1 или ММ Я Г.б(15)), Г.4.3. Ввод и вывод денежных значений Форматирование денежных сумм технически сходно с форматированием «обычных» чисел (6 Г.4,2). Однако представление денежных величин еще более чувствительно к национальным особенностям. Например, отрицательные значения (убыток, дебит), такие как — 1.25, в некоторых контекстах должны быть представлены как положительные значения, заключенные в круглые скобки: (1.25). Л иногда для распознавания отрицательных сумм используется цвет. Не существует стандартного «денежного типам Напротив, предполагается, что программист явно применит денежные фасеты к тем числам, к«порыв, как ему известно, представляютденежные суммы. 11апример: с1азе Мопсу ( // простой и/ип для хранения денежних величин /опу/и/атоип/, риб//с; Молву(/опу/п/л): атоип/(л) () ореха/ос 1опу /и/() сопз/( ге/игп атоипб 1 ооЫЦопу /п/ /) ( сои/ « 'значение = «л « ' сумма= " «Мопеу(1) «епс/1; Задача денежных фасетов состоит в предоставлении разумно простого способа записи оператора вывода для Мопеу таким образом, чтобы сумма печаталась с учетом местных соглашений (см, 6 ГАЗ.2).

Формат вывода будет зависеть от локализации, закрепленной за саи/. Возможные варианты форматов вывода: значение= /234567 сумл/и= $12345.67 значение= /234567 сулла = /2345,67 0КК значение= — /234567 сулима= Я вЂ” /2345.67 значение=. — /234567 сул/л~а= -Я/2345.67 зна /ение= — /234567 суллл~а = (С///л/2345,67) Для денежных сумм, как правило, важно точно учитывать даже самую мелкую монету. 11оэтому я принял обычное соглашение об использовании целого значения для представления количества центов (пенсов, эрэ, копеек и т.

д.), а не количества долларов (фунтов, крон, динар, евро и т. д.). Это соглашение поддерживается функцнеи /гас /1/у//з() фасеты топеурипс1 К ГА.3,1). Вид «десятичной точки» определяется при помощи /(ес/та/ ро/п/(). Фасеты топеу уе1 и топеу ри/ предоставляют функции, выполняющие ввод/ вывод па основе формата, определенного фасетом топеу базе.

Приложение Г Локализация 980 Г.4.3.1. Пунктуация денег Фасет, управляющий представлением денежных величин, толеурилс1, естественно похож на фасет, управляюшнй обыкновенными числами, литрилс1 Ц ГА.2.1): с1акз з/ус толку Ьаке( рибдс влит раг1 (попе, зрасе, кутба!, к/дп, оа/ие) // часто формтла вывода // /ничего, заполнитель, символ, // знак, значение) // со еявфи калия фирка а та к1гис1 рапегл ( сбаг/)е!д(4), ), ); 1етр1а1е <с!акз СЬ, Ьоо)/п1егпадопа! =/а!зе> с!азз зЫстопеурипс1 . рибдс !оса1е /асе1, рабус топеу Ьаке ( риб!!с 1урес)е/СЬ сбаг 1уре; гуре<!е/бак!с згг!пд<СЬ> з1ппд гуре; екр!!с11 топеурипсг)р!ее 1 г = О); СЬ с/ес/та1роиИ() соле!; СЬ /боикипдк зер)) сопя!; к1гтд дгоир/пд() сопз1; // '.'в с1икчдс() // ', ' в с!акз!с() // "" в с/аккре О, то есть без <руппировки к1ппд суре сип кутба!() сопз1; // 'Я' в с!акк/со кгг!пд 1уре розливе к/дп)) сопя!; //"" в с!акк!с/) кгг!пд 1уре педапое к)дп() сопз1, // "— ' в с!акис() т1ггас с)/д!1к)) солей // количество знаков после десятичной // точки; 2 в с!акк/с() // / зутЬо1, к!дп, попе, оа!ке ) в с!акк!сО // / кутЬо1, кадп, попе, оа!ие ) в с!акк!с О рапегп рок )оста!() сопв1, ра11егп лед /оста!у соле!; к1анс соле! Ьоо! !л11 = 1п1егпа1!оли!; // использование меясдународних // денелсних форл~атов кга1!с !оса!еьи)Ы; // идентификатор фасета (4 Г2, у ГЗ, г" ГЗ.!) рго1ес1ес/: -топеурилс1(); //виртуальные "до функуии' (см.

у" Г4.!) Наш простой тип Молву можно использовать для управления форматами ввода/ вывода или для хранения денежных значений. В первом случае, мы приводим (лругие) типы, используемые для хранения денежных сумм, к Молву перед записью и читаем в переменные Мопед перед преобразованием в другие типы. Меньше провоцирует ошибки хранение денежных значений только в переменных типа Молву; в этом глучае невозможно забыть преобразовать значение в Молву перед его записью, и не возникнут ошибки ввода прн попытках чтения денежных величин без учета местных особенностей. Однако внедрение типа Молву в систему, которая для этого не приспособлена, может оказаться невозможным. В таких случаях необходимо применять преобразования (приведения) Молву в операциях ввода и вывода.

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

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

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

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