C управление форматом вывода в поток. Буферизированный (потоковый) ввод-вывод
До сих пор в программных примерах мы пользовались только функциями стандартной библиотеки С. Однако в C++ имеются собственные средства, основанные на принципах классовой модели. Другими словами, в исполнительной библиотеке C++ имеется набор классов для управления вводом-выводом.
В отличие от функций буферизованного ввода-вывода С (таких, как print f и scanf, не выполняющих никаких проверок на соответствие аргументов форматной строке) классы потоков C++ безопасны в отношении типа. Ввод-вывод использует механизм перегрузки операций, гарантирующий вызов нужной функции-операции для указанного типа данных. Это главное преимущество потоков языка C++.
Классы потоков
К классам потоков относятся следующие:
- Класс streambuf управляет буфером потока, обеспечивая базовые операции заполнения, опорожнения, сброса и прочих манипуляций с буфером.
- Класс ios является базовым классом потоков ввода-вывода.
- Классы istream и ostream — производные от ios и обеспечивают работу потоков соответственно ввода и вывода.
- Класс iоstream является производным от двух предыдущих и предусматривает функции как для ввода, так и для вывода.
- Классы ifstream, of stream и f stream предназначены для управления файловым вводом-выводом.
- Классы istrstream и ostrstream управляют резидентными потоками (форматированием строк в памяти). Это устаревшая методика, оставшаяся в C++Builder в качестве пережитка.
Для работы с потоками вам потребуется включить в программу заголовочный файл iostream.h. Кроме того, может потребоваться подключить файлы fstream.h (файловый ввод-вывод), iomanip.h (параметризованные манипуляторы) и strstream.h (форматирование ь памяти).
Предопределенные потоки
Библиотека ввода-вывода C++ предусматривает четыре предопределенных объекта-потока, связанных со стандартными входным и выходным устройствами. Ниже дана сводка этих объектов.
Таблица 9.1. Предопределенные объекты-потоки C++
Имя | Класс | Описание |
istream | Ассоциируется со стандартным вводом (клавиатурой). |
|
cout | ostream | Ассоциируется со стандартным выводом (экраном). |
cerr | ostream | Ассоциируется со стандартным устройством ошибок (экраном) без буферизации. |
clog | ostream | Ассоциируется со стандартным устройством ошибок (экраном)с буферизацией. |
Операции извлечения и передачи в поток
Основными классами ввода-вывода C++ являются istream и ostream. Первый из них перегружает операцию правого сдвига (>>), которая служит в нем для ввода данных и называется операцией извлечения из потока. Класс ostream перегружает соответственно операцию левого сдвига (