- •Обзорные лекции по курсу
- •1.Потоки
- •1.1. Заголовочные файлы библиотеки потоков iostream
- •1.2. Классы и объекты потоков ввода-вывода
- •2.Вывод потоков
- •Int main()
- •3. Ввод потоков
- •Int X, у;
- •Int с;
- •Сохранение типов данных при вводе-выводе
- •4. Неформатированный ввод-вывод с использованием read, gcount и write
- •5. Манипуляторы потоков
- •Манипуляторы, определяемые пользователем
- •Упражнения для самопроверки
1.1. Заголовочные файлы библиотеки потоков iostream
Библиотека потоков iostream предоставляет сотни возможностей для выполнения операций ввода-вывода. Интерфейс библиотеки разбит на несколько заголовочных файлов.
Большая часть программ на языке С++ включает заголовочный файл <iostream.h>, который содержит основные сведения, необходимые для всех операций с потокам ввода-вывода. Заголовочный файл <iostream.h> включает объекты cin, cout, cerr и clog, которые соответствуют стандартному потоку ввода, стандартному потоку вывода, небуферизованному и буферизованному стандартным потокам вывода сообщений об ошибках. Предусмотрены возможности как для форматированного ввода-вывода, так и для неформатированного.
Заголовочный файл <iomanip.h> содержит информацию, полезную для обработки форматированного ввода-вывода при помощи так называемых параметризованных манипуляторов потока.
Заголовочный файл <fstream.h> содержит важную информацию для проведения операций с файлами, обработка которых осуществляется под контролем пользователя.
Заголовочный файл <strstream.h> содержит информацию, важную для выполнения форматированного ввода-вывода в память. Это похоже на обработку файлов, но операции ввода-вывода проводятся с символьными массивами, а не с файлами.
Заголовочный файл <stdiostream.h> включает нужные сведения для программ, использующих для выполнения операций ввода-вывода сочетание стилей языков С и С++. При создании новых программ следует избегать для операций ввода-вывода стиля языка С. Но для программистов, которым необходимо модифицировать уже существующие программы, написанные на С, эта предоставляемая в С++ возможность сочетания двух стилей окажется полезной.
Программы на С++ могут содержать также другие библиотеки, связанные с вводом-выводом, в которых предусмотрены, например, такие специфические для системы возможности, как управление специализированными устройствами для ввода-вывода аудио- и видеоданных.
1.2. Классы и объекты потоков ввода-вывода
Библиотека iostream содержит много классов для обработки широкого спектра операций ввода-вывода.
Класс istream поддерживает операции по вводу потоков.
Класс ostream поддерживает операции по выводу потоков.
Класс iostream поддерживает оба типа операций: ввод и вывод потоков.
Класс istream и класс ostream являются производными классами прямого наследования базового класса ios.
Класс iostream является производным классом множественного наследования классов istream и ostream.
Перегрузка операций обеспечивает удобную запись операций ввода-вывода. Операция сдвига влево («) перегружена для обозначения вывода в поток и называется операцией поместить в поток. Операция сдвига вправо (») перегружена для обозначения ввода потока и называется операцией взять из потока. Эти операции применяются к объектам стандартных потоков cin, cout, cerr и clog и обычно используются также с объектами потоков, тип которых определен пользователем.
Объект стандартного потока ввода cin класса istream, как принято говорить, «привязан» (или «присоединен») к стандартному устройству ввода, обычно к клавиатуре. Операция взять из потока, показанная в приведенном ниже операторе, означает, что значение целой переменной nic (если полагать, что переменная nic объявлена как целая типа int) должно быть введено из объекта cin в память: cin » nic;
Заметим, что операция взять из потока является «достаточно интеллектуальной», чтобы определить тип используемых данных. Если переменная nic была должным образом объявлена, то не требуется никакой дополнительной информации для использования операции взять из потока (между прочим, в случае использования языка С такая информация требуется).
Объект стандартного потока вывода cout класса ostream, как принято говорить, «привязан» к стандартному устройству вывода, обычно к экрану монитора. Операция поместить в поток, показанная в приведенном ниже операторе, означает, что значение целой переменной nic должно быть выведено из памяти на стандартное устройство вывода:
cout « nic;
Операция поместить в поток также автоматически определяет тип переменной nic (при условии, что она должным образом объявлена), а поэтому для использования операции поместить в поток никакой дополнительной информации не требуется.
Объект cerr класса ostream «привязан» к стандартному устройству вывода сообщений об ошибках. Выводимые потоки данных для объекта cerr являются небуферизованными. Это означает, что каждая операция поместить в cerr приводит к мгновенному появлению выводимых сообщений об ошибках; в этих случаях пользователь своевременно и должным образом информируется о неполадках в системе.
Объект clog класса ostream «привязан» тоже к стандартному устройству вывода сообщений об ошибках. Выводимые потоки данных для объекта clog являются буферизованными. Это означает, что каждая операция поместить в clog может приводить к тому, что вывод хранится в буфере до тех пор, пока буфер полностью не заполнится или пока содержимое буфера не будет выведено принудительно.
При обработке файлов в С++ используются следующие классы:
класс ifstream, выполняющий операции ввода из файлов;
класс ofstream, выполняющий операции вывода в файлы;
класс fstream, предназначенный для операций ввода-вывода файлов.
Класс ifstream наследует классу istream, класс ofstream наследует классу ostream, а класс fstream — классу iostream. В большинстве систем в полной иерархии классов потоков ввода-вывода поддерживается еще множество других классов, но и классы, приведенные выше, предоставляют широкие возможности, достаточные большинству программистов. Более подробные сведения об обработке файлов можно получить из справочного руководства по библиотекам классов С++ вашей системы.