Язык С++ для системного программирования. Имена-этикетки. Класс как область действия, страница 17

Библиотека потоков С++ (библиотека iostream) представляет набор классов для управления вводом/выводом. Эти классы имеют несколько преимуществ по сравнению с традиционными средствами ввода/вывода (i/o):

· Надежность. Семейства функций printf и scanf не предусматривают никакой проверки типа. Компилятор не может сигнализировать о несоответствии спецификаций формата передаваемым аргументам. Механизм потоков С++ основывается на перегрузке функций (операций), что обеспечивает для каждого типа передаваемых данных вызов соответствующей функции.

· Расширяемость. Применение процедур С ограничено файловыми потоками (и некоторыми устройствами, доступ к которым возможен как к предопределенным потокам). Эти процедуры допускают расширения. Классы С++, благодаря полиморфизму, позволяют одним и тем же процедурам работать с потоками различных типов. Например, тот же интерфейс, что используется стандартным вводом/выводом, применим к файловым и резидентным потокам. Можно предусмотреть собственные перегруженные функции, которые позволят библиотеке потоков С++ работать с определяемыми пользователем типами.

· Простота и последовательность. Широкое использование перегруженных функций позволяет библиотеке потоков поддерживать единообразный интерфейс ввода/вывода. Это приводит к более простому и понятному синтаксису.

23.2 Заголовочные файлы

Чтобы обеспечить программе доступ к библиотекам потоков С++, нужно включить в нее заголовочный файл iostream.h. При файловом вводе/выводе следует включить также fstream.h и iomanip.h (манипуляторы).

23.3 Предопределенные объекты-потоки

Библиотека iostream имеет четыре предопределенных объекта-потока. Они ассоциированы со стандартным вводом/выводом. Эти объекты описаны в следующей таблице.

Имя

Тип класса

Описание

cin

istream_withassign

Ассоциируется со стандартным вводом (т.е. клавиатурой)

cout

ostream_withassign

Ассоциируется со стандартным выводом (т.е. экраном)

cerr

ostream_withassign

Ассоциируется со стандартным устройством для вывода ошибок (т.е. экраном) с небуферизованным выводом

clog

ostream_withassign

Ассоциируется со стандартным устройством для вывода ошибок (т.е. экраном) с буферизованным выводом

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

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

#include <iostream.h>

void main()

{

cout<<"Всем привет!" <<'\n';

 }

После приветствия стоит символ перевода на новую строку '\n'.

Класс iostream использует для ввода операцию правого сдвига (>>). В таком контексте ее часто называют операцией извлечения (из потока). Следующий пример применяет операцию извлечения к предопределенному объекту cin.

#include <iostream.h>

void main()

 {

char name [20]];

cout<<"Введите имя";

cin >>name;

 }

Классы istream и ostream перегружают соответственно операции извлечения и помещения для всех встроенных типов. Такая перегрузка позволяет использовать единообразный синтаксис для ввода/вывода символов, строк, целых и вещественных типов.

Кроме того, перегруженные операции << и >> возвращают ссылку на объект (return*this) соответствующего типа. Это позволяет последовательно соединять несколько операций, т.е. реализовать сцепление вызовов операций ввода/вывода.

Например: