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