Файлы. Общая концепция организации ввода-вывода данных в С++. Средства класса ios, обеспечивающие точную настройку вывода, страница 4

Передача при заполнении буфера           или по команде «пересылка буфера»

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

Рис.1. Схема организации буферизированного входного и выходного потоков

Ввод-вывод в стиле С удобнее использовать при форматном выводе в программах, не использующих объекты. Ввод-вывод в стиле С++ легче в случаях, не требующих форматирования.  Библиотека ввода-вывода С++ –  это библиотека классов. Базовый принцип ООП: объекты знают, что делать при появлении обращения (сообщения) определенного типа (т.е. каждый тип имеет свой механизм обработки).

Каждый способ имеет свои преимущества и недостатки (см. Таблицу 1). Смешивать эти два способа в одной программе не рекомендуется.

Таблица 1. Ввод-вывод в С++

Ввод-вывод в стиле С

Ввод-вывод в стиле С++

механизм (переноса данных) ввода/вывода

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

поток связан с физическим устройством с помощью системы ввода/вывода; буфер как средство увеличения скорости передачи данных

классификация потоков по направлению обмена

входные

выходные

двунаправленные

классификация по виду устройств, с которыми поток работает

стандартные (передача данных от клавиатуры и на экран)

файловые (для обмена с файлами на внешних носителях)

строковые (для работы с массивами символов в оперативной памяти

поддержка средствами библиотеки языка

printfвывод в стандартный файл вывода stdout

fprintf– вывод в поток stream

sprintfвывод в строку

scanfввод из стандартного файла ввода stdin

fscanf - ввод из потока stream

sscanfввод из строки

иерархия классов, построенных на основе двух базовых классов  (ios – общие поля и методы и streambuf – буферизация потоков и их взаимодействие с физическими устройствами)

заголовочные файлы, содержащие описания функций и классов

stdio.h

iostream.h – стандартные объекты и операции с потоками ввода/вывода

fstream.h – потоки ввода/вывода в файл

strstream.h – потоки ввода/вывода в строку

стандартные потоки (базовые функции и объекты)

stdin – связывается с клавиатурой;

stdout – связывается с экраном;

stderr – связывается с экраном;

cinсвязывается с клавиатурой;

cout -  связывается с экраном;

cerr, clog – связывается с экраном;

достоинства

контроль типов, возможность работать с типами, определенными пользователем

недостатки

снижение быстродействия программы

Обычно при работе с потоковой библиотекой ввода-вывода программист использует классы:

ios – базовый класс

istream – класс входных потоков

ostream – класс выходных потоков

iostream – класс двунаправленных потоков ввода-вывода

istrstream – класс входных строковых потоков

ostrstream – класс выходных строковых потоков

strstream – класс двунаправленных потоков ввода-вывода

ifstream – входной файл

ofstream – выходной файл

fstream – двунаправленный файл

constream класс консольного выхода

Диаграмма взаимосвязи перечисленных классов:

Рис.2. Упрощенная схема иерархии потоковых классов

Стандартные потоки

Из рисунка видно, что класс iosявляется базовым для всей иерархии. Классы istream и ostream являются наследниками ios и предназначены для ввода и вывода соответственно. Класс iostream – наследник одновременно классов istream и ostream (пример множественного наследования). Его производные классы могут использоваться при работе с такими объектами как дисковые файлы.

Для использования стандартных потоков достаточно включить в программу оператор #include <iostream.h>. При этом в программе автоматически становятся доступны объекты (стандартные потоки):