Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга C++.doc
Скачиваний:
24
Добавлен:
10.11.2019
Размер:
2.48 Mб
Скачать

Предопределенные потоки.

Библиотека ввода-вывода имеет 4 предопределенных объекта-потока, ассоциированных со стандартным вводом и выводом:

cin

- объект класса istream, связанный со стандартным буферизированным входным потоком (обычно с клавиатурой);

cout

- объект класса ostream, связанный со стандартным буферизированным выходным потоком (обычно с дисплеем);

cerr

- объект класса ostream, связанный со стандартным небуферизированным выходным потоком (обычно с дисплеем), в который направляются сообщения об ошибках;

clog

- то же, что cerr, но буферизирован.

Каждый раз при включении в программу файла iostream.h происходит формирование объектов cin, cout, cerr и clog, т.е. создаются соответствующие стандартные потоки, и программисту становятся доступными связанные с ними средства ввода-вывода.

Операции помещения в поток и извлечения из потока.

Библиотека потоков С++ предусматривает два основных класса для ввода и вывода: istream и ostream. Класс ostream использует для вывода переопределенную операцию левого сдвига (<<), которую называют операцией помещения в поток. Класс istream использует для ввода переопределенную операцию правого сдвига (>>), которую называют операцией извлечения из потока.

Операции помещения и извлечения допускают сцепленные вызовы, т.к. возвращают значение ссылки на поток. Классы istream и ostream перегружают операции помещения и извлечения для всех встроенных типов данных. Такая перегрузка позволяет использовать единый синтаксис для ввода и вывода символов, строк, целых и вещественных чисел. Операции помещения/извлечения можно легко распространить на пользовательские типы данных. Для этого надо определить две функции со следующими заголовками (вспоминайте материал предыдущих занятий, тема "Перегрузка операторов"):

istream& operator >> (istream&, имя_типа&);

ostream& operator << (ostream&, имя_типа&);

Определяя операции помещения/извлечения для классов, их обычно делают дружественными, чтобы обеспечить доступ к закрытым элементам данных класса.

Файловый ввод-вывод с применением потоков.

В программах, которые мы писали до сих пор, вся информация, вводимая в процессе работы программы, терялась по окончании работы. Такие программы используются редко. Обычно одна и та же информация используется многократно в течении длительного времени. Для многократного использования информации ее записывают на диск в виде файла. Файлом можно назвать объект с именем, доступ к которому поддерживает (обеспечивает) операционная система. Поддержка операционной системы состоит в том, что в ней имеются средства:

  • создания файлов,

  • уничтожения файлов,

  • поиска файлов на диске (дискете и т.д.),

  • чтения и записи данных из файлов и в файлы,

  • открытия файлов,

  • закрытия файлов

  • и др.

Библиотека ввода-вывода С++ включает средства для работы с последовательными файлами.

Логически последовательный файл можно представить как именованную цепочку байтов, имеющую начало и конец. С помощью средств библиотеки можно осуществить следующие процедуры: создание файла, создание потока, открытие файла, "присоединение" файла к потоку, обмен с файлом с помощью потока, "отсоединение" потока от файла, закрытие файла, уничтожение файла. Кратко рассмотрим наиболее простые и удобные механизмы указанных действий.

Как уже отмечалось, бибилиотека потоков содержит три класса, предназначенных для ввода и вовода в файлы:

  • ofstream - для вывода (записи) данных в файл; (наследник ostream)

  • ifstream - для ввода (чтения) данных из файла; (наследник istream)

  • fstream - для чтения и для записи данных (двунаправленный обмен, наследник iostream).

Эти классы наследуют все особенности потоковых классов. Чтобы использовать эти классы, в текст программы необходимо включить заголовочный файл fstream.h. Тогда в программе можно будет определять конкретные файловые потоки, соответствующих типов (объекты классов ofstream, ifstream, fstream).