Справочник по C/C++
Классы ввода вывода библиотеки стандарта C++

В языке C++ существует две версии библиотеки iostream: библиотека старого стиля, определенная ранними версиями C++, и библиотека определенная стандартом ANSI/ISO для языка C++(Standard C++), в которой реализован новый подход к программированию. Библиотека старого стиля была описана в предыдущей главе, а эта глава посвящена описанию библиотеки iostream, соответствующей стандарту ANSI/ISO для языка C++

Система ввода-вывода, соответствующая стандарту C++, построена на основе довольно сложной системы шаблонных классов. Ниже приведен список этих классов.

Класс Назначение
basic_ios Обеспечивает операции ввода-вывода общего назначения
basic_streambuf Поддерживает нижний уровень операций ввода-вывода
basic_istream Поддерживает операции ввода
basic_ostream Поддерживает операции вывода
basic_iostream Поддерживает операции ввода-вывода
basic_filebuf Поддерживает нижний уровень файловых операций ввода-вывода
basic_ifstream Поддерживает файловые операции ввода
basic_ofstream Поддерживает файловые операции вывода
basic_fstream
Поддерживает файловые операции ввода-вывода
basic_stringbuf Поддерживает нижний уровень строковых операций ввода-вывода
basic_istringstream Поддерживает строковые операции ввода
basic_ostringstrearm Поддерживает строковые операции вывода
basic_stringstream Поддерживает строковые операции ввода-вывода

Кроме того, часть иерархии классов ввода-вывода составляет нешаблонный класс ios_base. Он предоставляет определения для различных элементов системы ввода-вывода.

Вся система ввода-вывода C++ построена на двух связанных, но различных иерархиях шаблонных классов. Первая выведена из класса ввода-вывода нижнего уровня basic_streambuf. Этот класс поддерживает базовые операции ввода и вывода нижнего уровня и обеспечивает основополагающую поддержку для всей системы ввода-вывода C++. Классы basic_filebuf и bаsc_stringbuf выведены из класса basic_streambuf. Если вы не занимаетесь разработкой новых методов программирования ввода-вывода, вам вряд ли придется напрямую использовать класс basic_streambuf или его подклассы.

В основном, вам придется работать с иерархией классов, которая выведена из класса basic_ios. Это класс ввода-вывода высокого уровня, который обеспечивает форматирование и обработку ошибок, а также предоставляет информацию о состоянии соответствующего потока ввода-вывода. Класс basic_ios используется в качестве базового для нескольких производных классов, включая такие классы, как basic_istream, basic_ostream и basic_iostream. Эти классы используются для создания потоков, способных выполнять операции ввода, вывода и ввода-вывода соответственно. Из класса basic_istream выведены классы basic_ifstream и basic_istringstream, из класса bаsic_ostream выведены классы basic_ofstream и basic_ostringstream, из класса basic_iostream выведены классы basic_fstream и basic_stringstream. Базовым для класса basic_ios является класс ios_base. Следовательно, любой класс, выведенный из класса basic_ios, имеет доступ к членам класса ios_base.

Классы ввода-вывода параметризованы для типа символов, с которыми они работают, и для характеристик этих символов. Например, вот как выглядит спецификация шаблона для класса basic_ios.

template >
class basic_ios: public ios_base

Здесь элемент CharType задает тип символа(например, char или wchar_t), а элемент Attr определяет тип, который описывает его атрибуты. Обобщенный тип char_traits — это класс, который определяет атрибуты, относящиеся к некоторому символу.

Библиотека ввода-вывода создает две специализации описанных выше иерархий шаблонных классов: одна - для 8-разрядных, а другая — для двухбайтовых символов. Ниже приводится полный список соответствия имен шаблонных классов их символьным версиям и версиям двухбайтовых символов.

Шаблонный класс Класс ориентированный на символы Класс ориентированный на двухбайтовые символы
basic_ios ios wios
basic_istream istream wistream
basic_ostream fstream wostream
basic_iostream ostream wiostream
basic_ifstream iostream wifstream
basic_ofstream ifstream wofstream
basic_fstream ofstream wfstream
basic_istringstream istringstream wistringstream
basic_ostringstream ostringstream wostringstrearn
basic_stringstream stringstream wstringstrearn
basic_streambuf streambuf wstreambuf
basic_filebuf filebuf wfilebuf
basic_stringbuf stringbuf wstringbuf

Поскольку подавляющее большинство программистов будут использовать операции ввода-вывода, ориентированные на обработку символов, в данной главе используются именно эти имена (т.е. при ссылке на классы ввода-вывода мы будем просто использовать их "символьные" имена, а не внутренние имена шаблонов). Например, в этой главе вместо имени basic_ios будет употребляться имя ios, вместо basic_istream — имя istream и вместо basic_fstream — имя fstream. Помните, что для потоков, работающих с двухбайтовыми символами, существуют параллельные функции, которые действуют аналогично описанным выше.

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

streambuf  ->  filebuf
stringbuf

ios  ->  istream  -> ifstream
istringstream
 -> ostream  -> ofstream
ostringstream
 -> iostream  ->  iofstream
iostringstream


Смотрите также

Библиотека iostream стандарта C++
Встроенные потоки C++
Заголовки ввода-вывода
Флаги форматирования
Манипуляторы ввода-вывода
Типы данных
Перегруженные операторы « и »
Создание манипуляторов
Пример использования потоков

Класс ios

Назначение: обеспечивает операции ввода-вывода общего назначения
Заголовок:
Иерархия: базовый класс классов ввода-вывода

Методы

bad — Проверка потока на ошибку
clear — Очищает флаги состояния, связанные с потоком
eof — Проверка конца файла
exceptions — Работа с флагами которые вызывают исключения
fail — Проверка на присутствие ошибки ввода-вывода
fill — Проверка на присутствие ошибки ввода-вывода
flags — Работа с флагами
good — Проверка на отсутствие ошибок ввод-вывода
precision — Возвращает или устанавливает текущее значение точности
rdstate — Возвращает состояние соответствующего потока
setf — Устанавливает флаги форматирования
setstate — Устанавливает состояние соответствующего потока
sync_with_stdio — Позволяет использовать стандартную С-подобную систему ввода-вывода
unsetf — Очистка одного или нескольких флагов форматирования
width — Работа с шириной поля

Класс ostream

Назначение: поддерживает операции вывода
Заголовок:
Иерархия: ios -> ostream

Методы

flush — Запись содержимого буфера
put — Записывает символ ch в соответствующий поток вывода
seekp — Перемещает указатель вывода
tellp — Определение текущего указателя вывода
write — Записывает из буфера байты в соответствующий поток вывода

Класс istream

Назначение: поддерживает операции ввода
Заголовок:
Иерархия: ios -> istream

Методы

gcount — Возврат количества символов, прочитанных во время последней операции ввода
getline — Читает строку из потока
get — Читает символы из потока
ignore — Чтение и отбрасывание символов из потока ввода
peek — Возвращает следующий символ в потоке или значение EOF
putback — Возвращает символ в соответствующий поток ввода
read — Читает байты из соответствующего потока ввода
readsome — Читает байты из соответствующего потока ввода
seekg — Перемещает указатель ввода
tellg — Определение текущего указателя ввода

Классы fstream, ifstream и ofstream

Назначение: поддерживает операции файлового ввода-ввода
Заголовок:
Иерархия:

  • ios -> istream -> ifstream
  • ios -> ostream -> ofstream
  • ios -> iostream -> fstream

Методы

close — Закрывает файл связанный с потоком
open — Связывает файл с потоком

Классы stringstream, istringstream и ostringstream

Назначение: поддерживает операции файлового ввода-ввода
Заголовок:
Иерархия:

  • ios -> istream -> istringstream
  • ios -> ostream -> ostringstream
  • ios -> iostream -> stringstream

Методы

str — Возвращает или освобождает строку заполненную текущим содержимым потока и вставляет, если необходимо другую