Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Потоки ввода-вывода






В C++ существует несколько классов потоков:

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

- Класс ios является базовым классом потоков ввода-вывода.

- Классы istream и ostream – производные от ios и обеспечивают работу потоков соответственно ввода и вывода.



- Класс iostream является производным от двух предыдущих и предусматривает функции, как для ввода, так и для вывода.

- Классы ifstream, ofstream и fstream предназначены для управления файловым вводом-выводом.

- Классы istrstream и ostrstream управляют резидентными потоками (форматированием строк в памяти).

 

Для работы с потоками необходимо подключить заголовочный файл < iostream>. Кроме того, может потребоваться подключить файлы < fstream> (файловый ввод-вывод), < iomanip> (параметризованные манипуляторы) и < strstream> (форматирование в памяти).

 

Библиотека ввода-вывода C++ предусматривает четыре предопределенных объекта-потока, связанных со стандартными входным и выходным устройствами.

 

Таблица 11.1 Предопределенные объекты-потоки C++

Имя Класс Описание
cin istream Ассоциируется со стандартным вводом (клавиатурой).
cout ostream Ассоциируется со стандартным выводом (экраном).
cerr ostream Ассоциируется со стандартным устройством ошибок (экраном) без буферизации.
clog ostream Ассоциируется со стандартным устройством ошибок (экраном)с буферизацией.

 

Основными классами ввода-вывода C++ являются istream и ostream. Первый из них перегружает операцию правого сдвига (> >), которая служит в нем для ввода данных и называется операцией извлечения из потока. Класс ostream перегружает соответственно операцию левого сдвига (< <); она применяется для вывода и называется операцией передачи в поток.

Библиотека ввода-вывода предусматривает три способа форматирования: посредством вызова форматирующих функций-элементов, с помощью манипуляторов или путем установки или сброса флагов потока.

Подробней форматирование ввода-вывода рассмотрено в лабораторной работе №2.

 

Состояние объекта класса ios (и производных от него) содержится в его закрытом элементе _state в виде набора битов (Таблица 11.2).

 

 

Таблица 11.2 биты состояния потока

Бит Описание
goodbit С потоком все в порядке (на самом деле это не какой-то бит, а 0 — отсутствие битов ошибки).
eofbit Показывает, что достигнут конец файла.
failbit Индицирует ошибку формата или преобразования. После очистки данного бита работа с потоком может быть продолжена.
badbit Индицирует серьезную ошибку потока, связанную обычно с буферными операциями или аппаратурой. Скорее всего, поток далее использовать невозможно.

 

Для опроса или изменения состояния потока в классе ios имеется ряд функций и операций.

- int rdstate(); Возвращает текущее состояние.

- bool eof(); Возвращает true, если установлен eofbit.

- bool good(); Возвращает true, если не установлен ни один из битов ошибки.

- bool fail(); Возвращает true, если установлен failbit или badbit.

- bool bad(); Возвращает true, если установлен badbit.

- void clear(int = 0); Сбрасывает биты ошибки (по умолчанию) или устанавливает состояние потока в соответствии с аргументом.

- void setstate(int); Устанавливает состояние битов ошибки с соответствии с аргументом.

- operator void *(); Возвращает нулевой указатель, если установлен какой-либо из битов ошибки.

- bool operator! (); Возвращает true, если установлен какой-либо из битов ошибки.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.