Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






Класс 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. Для того, чтобы иметь возможность ввода пробельных символов с помощью операции > >, необходимо для соответствующего входного потока изменить формат ввода, установленный по умолчанию.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.