/* ...и так далее... */
/* Операторы для вывода: */
istream & operator<<( ostream & dest , char* pSource ) ;
istream & operator<<( ostream & dest , int & source ) ;
stream & operator<<( ostream & dest , char & source ) ;
/* ...и так далее... */
Оператор operator>>( ) называется оператором извлечения из потока, а operator<<( ) — оператором вставки в поток. Класс istream является базовым для ввода информации из файла или устройства ввода типа клавиатуры. При запуске программы на выполнение С++ открывает объект cin класса istream . Аналогично, ostream представляет собой базовый класс для файлового вывода, a cout — объект класса ostream по умолчанию.
_________________
277 стр. Глава 24. Использование потоков ввода-вывода

«Рассмотрим, что получится, если написать следующий код ( имеющийся на прилагаемом компакт-диске ).»
[ Диск ]
/* DefaultStreamOutput */
#include
#include
using namespace std ;
void fn( ostream & out )
{
out << "Меня зовут Стефан\n" ;
}
int main( int nNumberofArgs , char* pszArgs[ ] )
{
setlocale ( LC_ALL , ".1251" ) ; /* печать русских текстов */
fn( cout ) ;
system( "PAUSE" ) ; return 0 ;
}

Программа передаёт функции fn( ) поток cout . Функция использует оператор operator<<( ) . Сначала С++ определит, что левый аргумент имеет тип ostream , а правый — тип char* . Вооружённый этими знаниями, он найдёт прототип функции operator<<( ostream & , char* ) в заголовочном файле iostream . Затем С++ вызовет функцию вставки в поток для char* , передавая ей строку "Меня зовут Стефан\n" и объект cout в качестве аргументов. Другими словами, он вызовет функцию operator<<( cout , "Меня зовут Стефан\n" ) . Функция для вставки char* в поток, которая является частью стандартной библиотеки С++, выполнит необходимый вывод.
Но откуда компилятору известно, что cout является объектом класса ostream ? Этот и ещё несколько глобальных объектов объявлены в файле iostream.h ( их список приведён в табл. 24.1 ). Эти объекты автоматически конструируются при запуске программы, до того как main( ) получает управление.
Таблица 24.1. Стандартные потоки ввода-вывода
_________________
Объект — Класс — Назначение
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
cin — istream — Стандартный ввод
cout — ostream — Стандартный вывод
cerr — ostream — Стандартный небуферизованный вывод сообщений об ошибках
clog — ostream — Стандартный буферизованный вывод сообщений об ошибках
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
►Знакомство с подклассами fstream...278
Подклассы ofstream , ifstream и fstream объявлены в заголовочном файле fstream.h и обеспечивают потоки ввода-вывода в дисковые файлы. Эти три класса предоставляют множество функций для управления вводом и выводом, многие из которых наследуются от ostream и istream . Полный список этих функций вы можете найти в документации к компилятору, а здесь я приведу только несколько из них, чтобы вы могли с чего-то начать.
_________________
278 стр. Часть 5. Полезные особенности
Класс ofstream , который используется для файлового вывода, имеет несколько конструкторов; наиболее часто применяется следующий:
ofstream::ofstream( char* pFileName ,
int mode = ios::out ,
int prot = filebuff::openprot ) ;
Первый аргумент этого конструктора — указатель на имя открываемого файла. Второй и третий аргументы определяют, как именно должен быть открыт файл. Корректные значения аргумента mode приведены в табл. 24.2, a prot — в табл. 24.3. Эти значения являются битовыми полями, к которым применяется оператор побитового ИЛИ ( классы ios и filebuff — родительские по отношению к ostream ).

«Выражениеios::out представляет статический член-данные классаios .»
[ Советы ]
Таблица 24.2. Значения аргумента mode в конструкторе класса ofstream
_________________
Флаг — Назначение
Читать дальше