Программирование на языке высокого уровня. Марапулец Ю.В. - 111 стр.

UptoLike

Составители: 

Глава 4. БИБЛИОТЕКИ ФУНКЦИЙ
§ 4.1. Библиотеки потоковых классов ввода-вывода
4.1.1. Описание потоковых классов
Объектно-ориентированный подход привел к изменению организации ввода-
вывода в языке С++. В языке Си для ввода-вывода использовались две основные биб-
лиотеки stdio.h и conio.h (основные функции данных библиотек будут рассмотрены да-
лее). Синтаксис языка С++, наряду с библиотеками языка Си, позволяет использовать
специально организованные потоковые классы.
Поток в целом можно воспринять как абстрактное понятие, относящееся к любо-
му переносу данных от источника к приемнику. Поток определяется как последователь-
ность байтов и не зависит от конкретного устройства, с которым производится обмен
(оперативная память, файл на диске, клавиатура или принтер). Обмен с потоком для
увеличения скорости передачи данных производится, как правило, через специальную
область оперативной памяти -
буфер. Фактическая передача данных выполняется при
выводе после заполнения буфера, а при вводе - если буфер исчерпан.
По направлению обмена потоки можно разделить на
входные (данные вводятся в
память),
выходные (данные выводятся из памяти) и двунаправленные (допускающие как
извлечение, так и включение).
По виду устройств, с которыми работает поток, можно разделить потоки на
стан-
дартные, файловые и строковые.
Стандартные потоки предназначены для передачи данных от клавиатуры и на эк-
ран дисплея, файловые потоки - для обмена информацией с файлами на внешних носи-
телях данных (например, на магнитном диске), а строковые потоки - для работы с мас-
сивами символов в оперативной памяти.
Для поддержки потоков библиотека C++ содержит иерархию классов, построен-
ную на основе двух базовых классов - ios и streambuf. Класс ios содержит общие для
ввода и вывода поля и методы, класс streambuf обеспечивает буферизацию потоков и их
взаимодействие с физическими устройствами. От этих классов наследуется класс istream
для входных потоков и ostream - для выходных. Два последних класса являются базовы-
ми для класса iostream, реализующего двунаправленные потоки. Ниже в иерархии клас-
сов располагаются файловые и строковые потоки.
Описания потоковых классов находятся в следующих заголовочных файлах:
<ios> - базовый класс потоков ввода/вывода;
<iosfwd> - предварительные объявления средств ввода/вывода;
<istream> - шаблон потока ввода;
<оstream> - шаблон потока вывода;
<iostream> - стандартные объекты и операции с потоками ввода/вывода;
<fstream> - потоки ввода/вывода в файлы;
<strstrea> - потоки ввода/вывода в строки;
<streambuf> - буферизация потоков ввода/вывода.
Подключаются вышеперечисленные заголовочные файлы стандартным образом
через директиву include препроцессора. Подключение к программе файлов <fstream> и
<sstream> автоматически подключает и файл <iostream>, так как он является для них ба-
зовым.
Основным преимуществом использования потоковых классов по сравнению с
функциями ввода/вывода, унаследованными из библиотеки Си, является контроль типов,
а также расширяемость, то есть возможность работать с типами, определенными пользо-
вателем. Кроме того, потоки могут работать, с расширенным набором символов wchar_t.
111
Глава 4. БИБЛИОТЕКИ ФУНКЦИЙ

     § 4.1. Библиотеки потоковых классов ввода-вывода

     4.1.1. Описание потоковых классов

      Объектно-ориентированный подход привел к изменению организации ввода-
вывода в языке С++. В языке Си для ввода-вывода использовались две основные биб-
лиотеки stdio.h и conio.h (основные функции данных библиотек будут рассмотрены да-
лее). Синтаксис языка С++, наряду с библиотеками языка Си, позволяет использовать
специально организованные потоковые классы.
      Поток в целом можно воспринять как абстрактное понятие, относящееся к любо-
му переносу данных от источника к приемнику. Поток определяется как последователь-
ность байтов и не зависит от конкретного устройства, с которым производится обмен
(оперативная память, файл на диске, клавиатура или принтер). Обмен с потоком для
увеличения скорости передачи данных производится, как правило, через специальную
область оперативной памяти - буфер. Фактическая передача данных выполняется при
выводе после заполнения буфера, а при вводе - если буфер исчерпан.
      По направлению обмена потоки можно разделить на входные (данные вводятся в
память), выходные (данные выводятся из памяти) и двунаправленные (допускающие как
извлечение, так и включение).
      По виду устройств, с которыми работает поток, можно разделить потоки на стан-
дартные, файловые и строковые.
      Стандартные потоки предназначены для передачи данных от клавиатуры и на эк-
ран дисплея, файловые потоки - для обмена информацией с файлами на внешних носи-
телях данных (например, на магнитном диске), а строковые потоки - для работы с мас-
сивами символов в оперативной памяти.
      Для поддержки потоков библиотека C++ содержит иерархию классов, построен-
ную на основе двух базовых классов - ios и streambuf. Класс ios содержит общие для
ввода и вывода поля и методы, класс streambuf обеспечивает буферизацию потоков и их
взаимодействие с физическими устройствами. От этих классов наследуется класс istream
для входных потоков и ostream - для выходных. Два последних класса являются базовы-
ми для класса iostream, реализующего двунаправленные потоки. Ниже в иерархии клас-
сов располагаются файловые и строковые потоки.
      Описания потоковых классов находятся в следующих заголовочных файлах:
       - базовый класс потоков ввода/вывода;
       - предварительные объявления средств ввода/вывода;
       - шаблон потока ввода;
      <оstream> - шаблон потока вывода;
       - стандартные объекты и операции с потоками ввода/вывода;
       - потоки ввода/вывода в файлы;
       - потоки ввода/вывода в строки;
       - буферизация потоков ввода/вывода.
      Подключаются вышеперечисленные заголовочные файлы стандартным образом
через директиву include препроцессора. Подключение к программе файлов  и
 автоматически подключает и файл , так как он является для них ба-
зовым.
      Основным преимуществом использования потоковых классов по сравнению с
функциями ввода/вывода, унаследованными из библиотеки Си, является контроль типов,
а также расширяемость, то есть возможность работать с типами, определенными пользо-
вателем. Кроме того, потоки могут работать, с расширенным набором символов wchar_t.


                                         111