Программирование >>  Процедурные приложения 

1 ... 78 79 80 [ 81 ] 82 83 84 ... 150


Глава 15. Классы ввода-вывода в языке C++

Иерархия классов ввода-вывода

Файловый ввод

Файловый вывод

o Двоичные файлы

Буферы потоков

o Строковые буферы

Несколько примеров форматного вывода данных

В главе Основы ввода-вывода в языке C++ были даны общие представления о потоковых объектах cin, cout и cerr и операторах потокового ввода-вывода << и >>. В настоящей главе мы поговорим о стандартных классах C++, управляющих работой этих объектов.

Иерархия классов ввода-вывода

Все потоковые классы порождены от одного класса, являющегося базовым в иерархии, - ios. Исключение составляют лишь классы буферизованных потоков, базовым для которых служит класс streambuf. Всех их можно разделить на четыре категории, как показано в табл. 15.1.

На рис. 15.1 схематически изображена иерархия классов ввода-вывода, порожденных от класса ios.

Классы семейства ios предоставляют программный интерфейс и обеспечивают необходимое форматирование обрабатываемых данных, тогда как непосредственную обработку данных выполняют классы семейства streambuf, управляющие обменом данными между буфером потока и конечным устройством (рис. 15.2).

Таблица 15.1. Категории классов ввода-вывода

Класс

Описание

Содержит базовые средства управления потоками, является родительским [для других классов ввода-вывода (файл IOSTREAM.H)

Потоковый ввод 1

stream

Содержит общие средства потокового ввода, является родительским для других классов ввода (файл IOSTREAM.H)

fstream

1 Предназначен для ввода данных из файлов (файл FSTREAM.H)

stream withassign

Поддерживает операцию присваивания; существует предопределенный объект cin данного [класса, по умолчание читающий данные из стандартного входного потока, но благодаря операции присваивания этот объект может быть переадресован на различные объекты класса istream(файл IOSTREAM.H)

strstream

Предназначен для ввода данных из строковых буферов (файл STRSTREA.H)

Потоковый вывод 1

ostream

1 Содержит общие средства потокового вывода, является родительским для других классов [вывода (файл IOSTREAM.H)

ofstream

Предназначен для вывода данных в файлы (файл FSTREAM.H)

ostream withassign

Поддерживает операцию присваивания; существуют предопределенные объекты cout, cerr и clog данного класса, по умолчанию выводящие данные в стандартный выходной поток, но благодаря операции присваивания их можно переадресовать на различные объекты класса Iostream (файл IOSTREAM.H)

ostrstream

Предназначен для вывода данных в строковые буферы (файл STRSTREA.H)

Потоковый ввод-вывод 1

ostream

Содержит общие средства потокового ввода-вывода, является родительским для других [классов ввода-вывода (файл IOSTREAM.H)

fstream

Предназначен для организации файлового ввода-вывода (файл FSTREAM.H)



strstream

Предназначен для ввода-вывода строк (файл STBLSTREA.H)

stdiostream

Поддерживает работу с системными средствами стандартного ввода-вывода, существует для совместимости со старыми функциями ввода-вывода (файл STDIOSTR.H)

Буферизованные потоки

streambuf

Содержит общие средства управления буферами потоков, является родительским для других буферных классов (файл IOSTREAM.H)

filebuf

Предназначен для управления буферами дисковых файлов (файл FSTREAM.H)

strstreambuf

1 Предназначен для управления строковыми буферами, хранящимися в памяти (файл STRSTREA.H)

stdiobuf

Осуществляет буферизацию дискового ввода-вывода с помощью стандартных системных функций (файл STDIOSTR.H)



ifstream

iststream

ofstre am

oststream


Рис. 15.1. Иерархия классов ввода-вывода порожденных от ios


Рис. 15.2. Иерархия классов, порожденных от streambuf Файловый ввод

Основные функции управления потоковым вводом сосредоточены в классе istream. С каждым из объектов этого класса и его производных связан объект класса streambuf. Эти классы работают в связке: первый осуществляет форматирование, а второй управляет низкоуровневым буферизованным вводом. Функции класса istream, доступные его потомкам, перечислены в табл. 15.2.

Функция

Описание

[Вызывается перед операцией чтения для проверки наличия ошибок в потоке

[Вызывается после каждой операции чтения

[Извлекает из потока требуемое число символов; если указан символ-ограничитель, он не извлекается

getline

Извлекает из потока требуемое число символов; если указан символ-ограничитель, он извлекается, но не сохраняется в буфере

read

ИИзвлекает из потока требуемое число байтов; применяется при работе с двоичными потоками



gnore ИВыбрасывает из потока требуемое число символов вплоть до символа-ограничителя

peek

Возвращает текущий символ, сохраняя его в потоке

gcount

Определяет число символов, извлеченных из потока во время последней операции чтения

eatwhite

Извлекает из потока ведущие пробельные символы; аналогичное действие выполняет манипулятор ws

putback

[Возвращает в поток символы, извлеченные из него во время последней операции чтения

sync

Синхронизирует внутренний буфер потока с внешним источником символьных данных

seekg

Перемещает маркер, обозначающий текущую позицию чтения, на требуемую позицию в потоке

tellg

Возвращает позицию маркера чтения

Таблица 15.2. Функции класса istream

Класс ifstream является потомком класса istream, ориентированным на чтение данных из файлов. Его конструктор автоматически создает объект класса filebuf, управляющий низкоуровневой работой с файлом, включая поддержку буфера чтения. Функции класса ifstream перечислены в табл. 15.3.

Таблица 15.3. Функции класса ifstream

ФУНКЦИЯ

Описание

open

Открывает файл для чтения, связывая с ним объект класса filebuf

close

Закрывает файл

setbuf

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

setmode

Задает режим доступа к файлу: двоичный (константа filebuf:: binary) или текстовый (константа filebuf:: text)

attach

Связывает указанный открытый файл с объектом класса filebuf

-dbuf

Возвращает указатель на объект класса filebuf

Возвращает дескриптор файла

s open

Проверяет, открыт ли файл, связанный с потоком

В следующей программе из файла читаются данные блоками по 80 символов, которые затем выводятся на экран:

ifstream.cpp

В этой программе на языке C++ демонстрируется

использование класса ifstreamдля чтения данных из файла.

#include <fstream.h> #define iCOLUMNS 80 void main(void)

charcOneLine[iCOLUMNS]; fstream ifMyInputStream( IFSTREAM.CPP ); while(ifMylnputStream) {

ifMylnputStream.getline(cOneLine, iCOLUMNS); cout << \n << cOneLine;

ifMylnputStream.close();

Конструктор клаccа ifstream создает объект ifMylnputStream, связывая с ним файл IFSTREAM.CPP, который открывается для чтения (по умолчанию в текстовом режиме). Этот объект можно использовать в условных операторах, проверяя его на равенство нулю, что означает достижение конца файла.

Функция getline(), унаследованная от класса istream, читает в массив cOneLineстроку текста длиной iCOLUMNS(80 символов). Ввод будет прекращен при обнаружении символа новой строки \n, конца файла или, если ни одно из этих событий не произошло, 79-го по счету символа (последним записывается символ \0).



1 ... 78 79 80 [ 81 ] 82 83 84 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика