Бьерн Страуструп - Язык программирования С++. Главы 9-10
Страница 20. Потоки



 * ГЛАВА 10. ПОТОКИ

                "Доступно только то, что видимо"
                           Б. Керниган

    В языке С++ нет средств для ввода-вывода. Их и не нужно, поскольку
такие средства можно просто  и  элегантно  создать  на  самом  языке.
Описанная здесь библиотека потокового ввода-вывода реализует строгий
типовой и вместе с тем гибкий и эффективный способ символьного ввода и
вывода целых, вещественных чисел и символьных строк, а также является
базой для расширения, рассчитанного на работу с пользовательскими типами
данных. Пользовательский интерфейс библиотеки находится в файле
<iostream.h>. Эта глава посвящена самой потоковой библиотеке, некоторым
способам работы с ней и определенным приемам реализации библиотеки.

10.1  ВВЕДЕНИЕ


Широко известна трудность задачи проектирования и реализации
стандартных средств ввода-вывода для языков программирования.
Традиционно средства ввода-вывода были  рассчитаны  исключительно  на
небольшое  число встроенных типов данных. Однако, в нетривиальных
программах на С++ есть много пользовательских типов данных, поэтому
необходимо предоставить
возможность ввода-вывода значений таких типов. Очевидно, что средства
ввода-вывода должны быть простыми, удобными, надежными в использовании
и, что важнее всего, адекватными. Пока никто не нашел решения, которое
удовлетворило бы всех; поэтому необходимо дать возможность пользователю
создавать иные средства ввода-вывода, а также расширять стандартные
средства ввода-вывода в расчете на определенное применение.
   Цель создания С++ была в том, чтобы пользователь мог определить новые
типы данных, работа с которыми была бы столь же удобна и эффективна как
и со встроенными типами. Таким образом, кажется разумным потребовать,
чтобы средства ввода-вывода для С++ программировались с использованием
возможностей С++, доступных каждому. Представленные здесь потоковые
средства ввода-вывода появились в результате попытки удовлетворить
этим требованиям.
Основная задача потоковых средств ввода-вывода - это процесс
преобразования объектов определенного типа в последовательность символов
и наоборот. Существуют и другие схемы ввода-вывода, но указанная является
основной, и если считать символ просто набором битов, игнорируя его
естественную связь с алфавитом, то многие схемы двоичного ввода-вывода
можно свести к ней. Поэтому программистская суть задачи сводится к
описанию связи между объектом определенного типа и бестиповой (что
существенно) строкой.
  Последующие разделы описывают основные части потоковой библиотеки С++:

10.2 Вывод: То, что для прикладной программы представляется выводом,
     на самом деле является преобразованием таких  объектов  как  int,
     char *, complex или Employee_record в последовательность символов.
     Описываются средства для записи объектов встроенных и
     пользовательских типов данных.
10.3 Ввод: Описаны функции для ввода символов, строк и значений
     встроенных и пользовательских типов данных.
10.4 Форматирование: Часто существуют определенные требования к виду
     вывода, например, int должно печататься десятичными цифрами,
     указатели в шестнадцатеричной записи, а вещественные числа должны
     быть  с явно заданной точностью фиксированного размера.
     Обсуждаются функции форматирования и определенные программистские
     приемы их создания, в частности, манипуляторы.
10.5 Файлы и потоки:  Каждая программа на С++  может  использовать  по
     умолчанию три потока - стандартный вывод (cout), стандартный ввод
     (cin) и стандартный поток ошибок (cerr). Чтобы работать с какими-
     либо устройствами или файлами надо создать потоки и привязать их
     к этим устройствам или файлам. Описывается механизм открытия и
     закрытия файлов и связывания файлов с потоками.
10.6 Ввод-вывод для С: обсуждается функция printf из файла <stdio.h>
     для С а также связь между библиотекой для С и <iostream.h> для
     С++.
Укажем, что существует много независимых реализаций
потоковой библиотеки ввода-вывода и набор средств, описанных здесь, будет
только подмножеством средств, имеющихся в вашей библиотеке. Говорят,
что внутри любой большой программы есть маленькая  программа,  которая
стремится вырваться наружу. В этой главе предпринята попытка описать
как раз маленькую потоковую библиотеку ввода-вывода, которая позволит
оценить основные концепции потокового ввода-вывода и познакомить
с наиболее полезными средствами. Используя только средства,
описанные здесь,  можно написать много программ; если возникнет
необходимость в более сложных средствах, обратитесь за деталями к вашему
руководству по С++. Заголовочный файл <iostream.h> определяет интерфейс
потоковой библиотеки. В ранних версиях потоковой библиотеки использовался
файл <stream.h>. Если существуют оба файла, <iostream.h> определяет полный
набор средств, а <stream.h> определяет подмножество, которое
совместимо с ранними, менее богатыми потоковыми библиотеками.
   Естественно, для пользования потоковой библиотекой вовсе не нужно
знание техники ее реализации, тем более, что техника может быть
различной для различных реализаций. Однако, реализация ввода-вывода
является задачей, диктующей определенные условия, значит приемы, найденные
в процессе ее решения, можно применить и для других задач, а само это
решение достойно изучения.

 
« Предыдущая статья   Следующая статья »