Хелпикс

Главная

Контакты

Случайная статья





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



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

 

Достаточно поместить в текст программы препроцессорную директиву #include <iostream.h> и можно с помощью операций включения (записи) данных в поток << и извлечения (чтения) данных из потока >> выполнять обмен с дисплеем и клавиатурой ЭВМ.

Объясняется это тем, что заголовочный файл iostream.h не только подключает к программе описания классов ios, istream, ostream, stream, но и содержит определения стандартных потоков ввода-вывода:

сin – объект класса istream, связанный со стандартным буферизированным входным потоком (обычно клавиатура консоли);

cout – объект класса ostream, связанный со стандартным буферизированным выходным потоком (обычно дисплей консоли);

cerr - объект класса ostream, связанный со стандартным небуферизированным выходным потоком (обычно дисплей консоли), в который направляются сообщения об ошибках;

clog - объект класса ostream, связанный со стандартным буферизированным выходным потоком (обычно дисплей консоли), в который с буферизацией направляются сообщения об ошибках.

Операции >> и << обеспечивают связи с потоками только в том случае, если они употребляются справа от имен потоковых объектов. В противном случае они как обычно обозначают операции сдвига. В соответствии с синтаксисом языка операции сдвига <<, >> имеют невысокий приоритет. Им “предшествуют”, например, все арифметические операции, преобразования типов, скобки и др. Использование операций <<, >> для обозначения передач данных в потоки и из потоков не изменяет их приоритета. Поэтому допустима, например, такая запись:

Cout << 2 + 3 + 4;

В результате выполнения этого оператора на экран будет выведено значение 9. Таким образом, арифметические выражения можно без скобок использовать в качестве правых операндов с операцией включения (вывода) данных в поток.

Чтобы вывести в поток значение выражения, содержащего операции более низкого ранга чем <<, требуется применение скобок:

Cout << (a + b < c);

Так как условная операция ? : и операции сравнения имеют более низкий приоритет, чем операция сдвига <<, то следующий оператор для отрицательного значения x

Cout << x < 0 ? –x : x;

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

 Cout << (x < 0 ? –x : x);

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

Cout << (2 << 1);

Выведет в поток (и на экран) значение 4.

Выражения, в которые входят операции >> и <<, должны иметь значения. В соответствии с определением, находящимся в файле iostream.h, значением выражения

Cout << выражение

является ссылка на объект cоut, т.е. операция включения << возвращает ссылку на тот потоковый объект, который указан слева от неё в выражении. Следовательно, к результату выполнения включения можно вновь применить операцию <<, как и к объекту cout. Таким образом рационально применять “цепочки” операций вывода в поток. Например, так:

cout << “\nx * 2 = “ << x * 2;

Если значением х служит 33, то результате выполнения любого из этих операторов с новой строки на экран будет выведено:

x * 2 = 66

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



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.