Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ввод-вывод.doc
Скачиваний:
14
Добавлен:
18.04.2015
Размер:
273.92 Кб
Скачать

31

Ввод – вывод данных

В программах по С++ можно равноправно использовать две библиотеки ввода – вывода: стандартную библиотеку функций ввода-вывода языка Си и библиотеку классов, специально созданную для С++. Библиотека функций становится доступной, как только к программе будет подключен файл stdio.h.

На протяжении всего курса мы использовать средства ввода-вывода библиотеки классов. Начнем рассмотрение с этой библиотеки.

Файл iostream.h связывает компилируемую программу с библиотекой ввода – вывода , построенной на основе механизма классов.

( Stream – поток, I - input , o – output)

Средства, описанные в этом файле, предназначены для извлечения данных из потоков и для включения данных в потоки.

Поток – это обмениваемая последовательность байтов (символов).

Обмен производится между оперативной памятью и внешними устройствами (файл на диске, принтер, клавиатура, дисплей, стример и т.п.), или между различными участками оперативной памяти.

При обмене часто используется вспомогательный участок оперативной памяти – буфер потока. В буфер помещаются данные, перед тем как они будут переданы внешнему устройству. При вводе данные сначала помещаются в буфер, а затем передаются переменным программы. Работу по заполнению и очистке буфера берет на себя, как правило, операционная система.

Задача программиста установить соответствие между последовательностью байтов и участвующими в обмене и типизированными объектами программы.

Используемые потоки делятся в соответствии с логикой обмена на :

  1. входные, из которых читается информация;

  2. выходные, в которые вводятся данные;

  3. двунаправленные, допускающие и чтение и запись.

Все потоки последовательные: в каждый момент для потока определена позиция обмена (для записи или чтения) и после обмена эта позиция перемещается по потоку на длину передаваемых при обмене данных.

Потоки принято делить на стандартные, консольные, строковые и файловые, в зависимости от того, с какими «устройствами» связаны потоки.

Стандартные и консольные соответствуют передаче данных от клавиатуры в ОП и из ОП к экрану дисплея.

Консольные потоки совместимы только с системой MS-DOS, поддерживаются классом constream, предоставляющим средства для манипулирования с экраном.

Если поток символов в совокупности образует символьный массив в ОП, то говорят о строковом потоке. Обмен данными происходит между различными участками оперативной памяти.

Если при использовании потока его символы размещаются на внешнем носителе, то говорят о файловом потоке.

Библиотека ввода – вывода, в отличие от других, это библиотека не функций, а классов.

Библиотека построена на основании двух базовых классов ios и streambuf.

Класс streambuf обеспечивает буферизацию данных во всех классах , которые являются его производными и которые мы рассмотрим ниже. Обращаться к его методам и данным из прикладных программ обычно не нужно. Класс нужен другим производным классам т.к. обеспечивает их методами буферизации данных, однако эти методы обычно явно не используются. Поэтому методы класса streambuf мы подробно рассматривать не будем.

Рассмотрим классы, которые программисты активно используют при потоковом вводе-выводе:

ios - базовый потоковый класс

istream - класс входных потоков

ostream - класс выходных потоков

iostream - класс двунаправленных потоков ввода - вывода

istrstream - класс входных строковых потоков

ostrstream - класс выходных строковых потоков

strstream - класс двунаправленных строковых потоков ввода - вывода

ifstream - класс входных файловых потоков

ofstream - класс входных файловых потоков

fstream - класс двунаправленных файловых потоков ввода - вывода

constream - класс консольных потоков