Четвертый Borland C++ и его окружение

       

Потоки ввода-вывода


Потоком ввода-вывода называется абстрактное понятие, относящееся

к любому переносу данных от источника (или поставщика данных) к приемнику (или потребителю) данных.

В Турбо и Borland C++ используется новый способ работы с потоками ввода-вывода, который заключается в использовании операций '>>' и

'<<'. Функции потоков сокращают время разработки программы, избавляя

от необходимости непосредственно иметь дело с различными типами форматов, которые требуются для функций рrintf и scanf. Ниже показан сравнительный пример:

Си Турбо и Borland C++

#include <stdio.h> #include <iostream.h>

main() main()

{ {

int k; int k;

printf("Введите число: "); cout << "Введите число: ";

scanf("%d", &k); cin >> k;

printf("Число: %d\n", k); cout << "Число: " << k;



} }

cout - стандартный выходной поток (по умолчанию - экран). Данные

(например, значения переменных и строки) посылаются в поток с помощью

операции <<. Операция << (читающаяся как "поместить в...") пересылает

данные справа от нее в поток слева.

cin - стандартный входной поток (обычно - клавиатура). Значения,

вводимые с клавиатуры, присваиваются переменным с помощью операции

>>. Использование операций >> и << для потоков ввода/вывода является

типичным примером переопределения операций в С++ (см. "Переопределение операций").

Кроме cout и cin в библиотеке iostream предопределены - cerr

(стандартное устройство для вывода сообщений об ошибках, соответствующее stderr в Си) и clog (полностью буферизованная версия cerr (в Си

эквивалента нет).

Реальное преимущество при работе с потоками С++ заключается в

той простоте, с какой можно переопределять операторы << и >> при работе с собственными типами данных. В C++ есть два класса, istream и

ostream, которые можно использовать для ввода в объекты и вывода из

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




struct clock { // Простая структура данных

int hr, min, sec;

clock( int h, int m, int s) { hr = h; min = m; sec = s; }

};

Для переопределения << для вывода объектов типа clock требуется

следующее определение:

Поток вывода из объекта и '<<'

v v v

ostream& operator<<(ostream& strm, clock& c)

{

strm << c.hr << ":" << c.min << ":" << c.sec;

} ^

Возможно повторное использование

операции

Заметим, что переопределенная операция << должна возвращать

ostream&, то есть ссылку на ostream, Теперь можно организовать вывод

для объектов типа clock следующим образом:

clock c(12,31,55);

cout << c;

Вывод на принтере будет следующим:

12:31:55

Дополнительную информацию о потоках ввода-вывода можно получить

в руководстве программиста Турбо и Borland C++. В нем дана детальная

информация: по библиотеке iostream (определенной в файле iostream.h);

о форматировании ввода и вывода; о манипуляторах потока; вводе-выводе

в файл; режимах открытия файла; строковой обработке потока, а также

всех классах потоков: filebuf, fstream, fstreambase, ifstream, ios,

iostream, iostream_withassign, istream, istream_withassign,

istrstream, ofstream, ostream, ostream_withassign, ostrstream,

streambuf, strstreambase, strstreambuf, strstream.


Содержание раздела