Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в С++. Страуструп..doc
Скачиваний:
63
Добавлен:
02.05.2014
Размер:
3.46 Mб
Скачать

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> определяет подмножество, которое

совместимо с ранними, менее богатыми потоковыми библиотеками.

Естественно, для пользования потоковой библиотекой вовсе не нужно

знание техники ее реализации, тем более, что техника может быть

различной для различных реализаций. Однако, реализация ввода-вывода

является задачей, диктующей определенные условия, значит приемы, найденные

в процессе ее решения, можно применить и для других задач, а само это

решение достойно изучения.