ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 12) онлайн

Иерархия потоковых классов

Потоковые классы имеют довольно сложную иерархическую структуру. На рис. 12.1

показана организация важнейших из них.

Мы уже встречались с использованием некоторых потоковых классов. Опе-

рация извлечения >> является методом класса istream, операция вставки << —

методом класса ostream. Оба этих класса являются наследниками ios. Объект

cout, представляющий собой стандартный выходной поток, который обычно вы-

водит на экран данные, является предопределенным объектом класса ostream_

withassign, являющегося наследником класса ostream. Аналогично, cin — объект

istream_withassign, наследника istream.

Классы, используемые для вывода данных на экран и ввода с клавиатуры,

описаны в заголовочном файле IOSTREAM, который мы всегда подключали в на-

ших примерах из предыдущих глав. Классы, используемые для ввода/вывода

файлов, объявлены в файле FSTREAM. На рис. 12.1 видно, в каких заголовочных

файлах что хранится. (К сказанному можно добавить, что некоторые манипу-

ляторы описаны в IOMANIP, а некоторые классы для работы с объектами «в па-

мяти» определены в STRSTREAM.) В качестве полезного упражнения можно рас-

печатать эти заголовочные файлы и проследить взаимоотношения различных

 

IOSTREAM  FSTREAM

 

Рис. 12.1. Иерархия потоковых классов

На рис. 12.1 видно, что класс ios является базовым для всей иерархии. Он

содержит множество констант и методов, общих для операций ввода/вывода

любых видов. Некоторые из них, такие, как флаги форматирования showpoint и

fixed, мы уже встречали. В классе ios есть также указатель на класс streambuf,

значением которого является адрес текущего буфера памяти. С помощью буфе-

ра производится обмен данными (запись или чтение). Кроме того, ios содержит

некоторые низкоуровневые программы для обработки этих данных. В обычной

ситуации вам не нужно заботиться о классе streambuf, обращение к которому из

других классов происходит автоматически.

Классы istream и ostream являются наследниками ios и предназначены для

ввода и вывода соответственно. Класс istream содержит такие функции, как get(),

getline(), read() и перегружаемую операцию извлечения (>>), тогда как класс

ostream содержит функции put(), write() и перегружаемую операцию вставки (<<).

Класс iostream — наследник одновременно классов istream и ostream (пример

множественного наследования). Его производные классы могут использоваться

классов. Файлы хранятся в директории INCLUDE вашего компилятора. При

изучении хранящихся в этих файлах классов можно найти ответы на многие

вопросы, касающиеся потоков.

 при работе с такими объектами, как дисковые файлы, которые могут быть откры-

ты одновременно для записи и чтения. Три класса — istream_withassign, ostream_

withassign и iostream_withassign — являются наследниками istream, ostream и iostream

соответственно. Они добавляют к этим классам операторы присваивания.

Приведенный ниже свод классов может показаться довольно абстрактным.

Его можно пока пропустить, чтобы вернуться к нему при осуществлении каких-

либо конкретных действий с использованием потоков.

 

5