Передача при заполнении буфера или по команде «пересылка буфера»
Буферизированный входной поток
Рис.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>. При этом в программе автоматически становятся доступны объекты (стандартные потоки):
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.