Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Электронный конспект лекций (семестр 2).doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
251.39 Кб
Скачать

2.2.Стандартные потоки

Класс istream реализует поток ввода, класс ostream – поток вывода. Эти классы определены в файле заголовков iostream.h. Библиотека потоков ввода-вывода определяет четыре глобальных системных объекта: cin, cout, cerr и clog. При этом cin представляет стандартный входной поток, cout, cerr и clog – стандартный выходной поток. Объекты cout, cerr и clog принадлежат к классу ostream, объект cin – к классу istream. По умолчанию стандартный входной поток связан с клавиатурой, стандартный выходной поток – с экраном. Наличие нескольких объектов для вывода информации обеспечивает возможность разделять обычный вывод и, скажем, сообщения об ошибках (cerr и clog предназначены именно для этого).

Разница между cout и cerr существенна в операционных системах типа Unix – они используют разные дескрипторы для вывода. В других системах они существуют в основном для совместимости.

Вывод в стандартный выходной поток может осуществляться, например, с помощью операции >>, а ввод из стандартного входного потока – с помощью операции <<.

2.3. Операции >> и <<

Операция >> для класса istream и операция << для класса ostream определены для всех встроенных типов языка C++ и для указателей на стро­ку символов (char*). Эти операции – операции побитового сдвига, переопределенные ("перегруженные") для входных и выходных потоков. Перегрузка операций, реализованная в C++, позволяет придать операциям дополнительный смысл и расширить область их действия. Если мы хотим использовать такую же запись для ввода и вывода других типов данных, определенных в программе, для них нужно определить ("перегрузить") эти операции.

Операция ввода >> извлекает некоторую последовательность символов из входного потока и размещает ее в области памяти, определяемой своим вторым операндом (переменной или массивом символов). По умолчанию символы пробела, табуляции и конца строки считаются разделителями.

Если в качестве второго операнда операции >> используется переменная числового типа (int, long, short, double, float), введенная символьная последовательность преобразуется к требуемому числовому типу (естественно, для корректного выполнения данной операции вводимая последовательность символов должна представлять собой запись числа соответствующего типа). При вводе чисел вещественных типов (double, float) для разделения целой и дробной части следует использовать точку, для ввода чисел с нулевым значением дробной части можно использовать соответствующие целые числа. Правым ограничителем при вводе числового значения является первый разделитель или первый недопустимый символ.

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

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

cout << x << ' ' << y;

что в более подробной записи может выглядеть так:

((cout << x) << ' ') << y;

Аналогично реализована операция ввода <<, позволяющая соединять несколько операций ввода:

cin >> x >> y;

При вводе данных с помощью операции >> по умолчанию пробельные символы воспринимаются как разделители, нельзя, например, ввести строку, содержащую пробел, или ввести присутствующий во входном потоке пробел в переменную типа char. Для того, чтобы иметь возможность ввода пробельных символов с помощью операции >>, необходимо для соответствующего входного потока изменить формат ввода, установленный по умолчанию.