Бьерн Страуструп. Язык программирования С++ Второе дополненное издание



Pdf көрінісі
бет184/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   180   181   182   183   184   185   186   187   ...   256
ГЛАВА 10. ПОТОКИ 
"Доступно только то, что видимо" 
Б. Керниган 
В языке С++ нет средств для ввода-вывода. Их и не нужно, поскольку такие средства можно просто и
элегантно создать на самом языке. Описанная здесь библиотека потокового ввода-вывода реализует 
строгий типовой и вместе с тем гибкий и эффективный способ символьного ввода и вывода целых, 
вещественных чисел и символьных строк, а также является базой для расширения, рассчитанного на 
работу с пользовательскими типами данных. Пользовательский интерфейс библиотеки находится в 
файле . Эта глава посвящена самой потоковой библиотеке, некоторым способам работы с 
ней и определенным приемам реализации библиотеки. 
10.1 ВВЕДЕНИЕ 
Широко известна трудность задачи проектирования и реализации стандартных средств ввода-вывода 
для языков программирования. Традиционно средства ввода-вывода были рассчитаны исключительно
на небольшое число встроенных типов данных. Однако, в нетривиальных программах на С++ есть 
много пользовательских типов данных, поэтому необходимо предоставить возможность ввода-вывода 
значений таких типов. Очевидно, что средства ввода-вывода должны быть простыми, удобными, 
надежными в использовании и, что важнее всего, адекватными. Пока никто не нашел решения, которое 
удовлетворило бы всех; поэтому необходимо дать возможность пользователю создавать иные средства 
ввода-вывода, а также расширять стандартные средства ввода-вывода в расчете на определенное 
применение. 
Цель создания С++ была в том, чтобы пользователь мог определить новые типы данных, работа с 
которыми была бы столь же удобна и эффективна как и со встроенными типами. Таким образом, 
кажется разумным потребовать, чтобы средства ввода-вывода для С++ программировались с 
использованием возможностей С++, доступных каждому. Представленные здесь потоковые средства 
ввода-вывода появились в результате попытки удовлетворить этим требованиям. 
Основная задача потоковых средств ввода-вывода - это процесс преобразования объектов 
определенного типа в последовательность символов и наоборот. Существуют и другие схемы ввода-
вывода, но указанная является основной, и если считать символ просто набором битов, игнорируя его 
естественную связь с алфавитом, то многие схемы двоичного ввода-вывода можно свести к ней. 
Поэтому программистская суть задачи сводится к описанию связи между объектом определенного типа 
и бестиповой (что существенно) строкой. 
Последующие разделы описывают основные части потоковой библиотеки С++: 
10.2 Вывод: То, что для прикладной программы представляется выводом, на самом деле является 
преобразованием таких объектов как int, char *, complex или Employee_record в 
последовательность символов. Описываются средства для записи объектов встроенных и 
пользовательских типов данных. 
10.3 Ввод: Описаны функции для ввода символов, строк и значений встроенных и 
пользовательских типов данных. 
10.4 Форматирование: Часто существуют определенные требования к виду вывода, например, int 
должно печататься десятичными цифрами, указатели в шестнадцатеричной записи, а 
вещественные числа должны быть с явно заданной точностью фиксированного размера. 
Обсуждаются функции форматирования и определенные программистские приемы их 
создания, в частности, манипуляторы. 
10.5 Файлы и потоки: Каждая программа на С++ может использовать по умолчанию три потока - 
стандартный вывод (cout), стандартный ввод (cin) и стандартный поток ошибок (cerr). Чтобы 
работать с какими-либо устройствами или файлами надо создать потоки и привязать их к этим 
устройствам или файлам. Описывается механизм открытия и закрытия файлов и связывания 
файлов с потоками. 
10.6 Ввод-вывод для С: обсуждается функция printf из файла  для С а также связь между 


Бьерн Страуструп.
Язык программирования С++ 
 
258 
библиотекой для С и  для С++. 
Укажем, что существует много независимых реализаций потоковой библиотеки ввода-вывода и набор 
средств, описанных здесь, будет только подмножеством средств, имеющихся в вашей библиотеке. 
Говорят, что внутри любой большой программы есть маленькая программа, которая стремится 
вырваться наружу. В этой главе предпринята попытка описать как раз маленькую потоковую библиотеку 
ввода-вывода, которая позволит оценить основные концепции потокового ввода-вывода и познакомить 
с наиболее полезными средствами. Используя только средства, описанные здесь, можно написать 
много программ; если возникнет 
необходимость в более сложных средствах, обратитесь за деталями к вашему руководству по С++. 
Заголовочный файл  определяет интерфейс потоковой библиотеки. В ранних версиях 
потоковой библиотеки использовался файл . Если существуют оба файла,  
определяет полный 
набор средств, а  определяет подмножество, которое совместимо с ранними, менее 
богатыми потоковыми библиотеками. 
Естественно, для пользования потоковой библиотекой вовсе не нужно знание техники ее реализации, 
тем более, что техника может быть различной для различных реализаций. Однако, реализация ввода-
вывода 
является задачей, диктующей определенные условия, значит приемы, найденные в процессе ее 
решения, можно применить и для других задач, а само это решение достойно изучения. 


Достарыңызбен бөлісу:
1   ...   180   181   182   183   184   185   186   187   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет