Программирование >>  Структурное программирование 

1 ... 210 211 212 [ 213 ] 214 215 216 ... 342


Заметим, что операция взять из потока является достаточно интеллектуальной , чтобы определить тип используемых данных. Если переменная grade была должным образом объявлена, то не требуется никакой дополнительной информации для использования операции взять из потока (между прочим, в случае использования языка С такая информация требуется).

Объект стандартного потока вывода cout класса ostream, как принято говорить, привязан к стандартному устройству вывода, обычно к экрану дисплея. Операция поместить в поток, показанная в приведенном ниже операторе, означает, что значение целой переменной grade должно быть выведено из памяти на стандартное устройство вывода:

cout grade;

Заметим, что операция поместить в поток также является достаточно умной , чтобы определить тип переменной grade (полагая, что она должным образом объявлена); поэтому для использования операции поместить в поток никакой дополнительной информации не требуется.

Объект cerr класса ostream привязан к стандартному устройству вывода сообщений об ошибках. Выводимые потоки данных для объекта cerr являются небуферизованными. Это означает, что каждая операция поместить в cerr приводит к мгновенному появлению выводимых сообщений об ошибках; в этих случаях пользователь своевременно и должным образом информируется о неполадках в системе.

istream oatraam

ioatraam

Рис. 11.1. Чааь иерархии классов потоков ввода-вывода

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

При обработке файлов в C-H-l- используются следующие классы:

класс if stream, выполняющий операции ввода из файлов;

класс ofstream, выполняющий операции вывода в файлы;

класс fstream, предназначенный для операций ввода-вывода файлов.

Класс ifstream наследует классу istream, класс ofstream наследует классу ostream, а класс fstream - классу iostream. Структура связей наследования классов потоков ввода-вывода приведена на рис. 11.2. В большинстве систем в полной иерархии классов потоков ввода-вывода поддерживается еще множество других классов, но и классы, приведенные выше, предоставляют широкие возможности, достаточные большинству программистов. Более подробные сведения об обработке файлов можно получить из справочного руководства по библиотекам классов С-Ы- вашей системы.



istream ostream

ifstream iostream ofstream

fstream

Рис. 11.2. Часть иерархии классов потоков ввода-вывода с ключевыми классами обработки

файлов

, figll 03.cpp

Вывод строки операцией поместить в поток

г

# include <iostreaiti.h>

main() {

cout Добро пожаловать в 1 1ир С++ !\п ; return 0;

Добро пожаловать в мир С++ !

11.3. Вывод потоков

Класс ostream в С++ обеспечивает возможность реализации форматированного и неформатированного вывода потоков. Эта возможность позволяет осуществлять вывод следующих данных: вывод данных стандартных типов с помощью операции поместить в поток; вывод символов с помощью функции-элемента put; неформатированный вывод с помощью функции-элемента write (см. раздел 11.5); вывод целых чисел в десятичном, восьмеричном и шестнадцатеричном форматах (см. раздел 11.6.1); вывод значений с плавающей запятой с различной точностью (см. раздел 11.6.2), с указанием по выводу десятичной точки (см. раздел 11.7.2), в экспоненциальном формате или в формате с фиксированной точкой (см. раздел 11.7.6); вывод данных с выравниваем относительно какой-либо границы поля указанной ширины (см. раздел 11.7.3); вывод данных с полями, заполненными заданными символами (см. раздел 11.7.7); вывод буквами в верхнем регистре в экспоненциальном формате и при выводе шестнадцатеричных чисел (см. раздел 11.7.7).

11.3.1. Операция поместить в поток

Вывод в потоки может быть выполнен с помощью операции поместить в поток, т.е. перегруженной операции . Операция перегружена для вывода элементов данных встроенных типов, для вывода строк и вывода значений указателей. В разделе 11.9 показано, как перегрузить операцию для вывода данных типов, определенных пользователем. В программе на рис. 11.3 показан вывод строки, использующий одну операцию поместить в поток. Пример многократного использования операции поместить в поток приведен на рис. 11.4. Выполнение этой программы дает тот же результат, что и выполнение предыдущей программы.



#include <iostream.h>

mam () {

t cout << Добро пожаловать в ;

A cout мир С++ !\n ;

t return 0;

}

Добро пожаловать в мир С++ !

Рис. 11.4. Вывод ароки с помощью двух операций поместить в поток

Переход на новую строку, осуществленный в этих программах с помощью управляющей последовательности \п, можно осуществить и с помощью манипулятора потока endl (end line - конец строки), как показано на рис. 11.5. Манипулятор потока endl вызывает переход на новую строку и кроме того приводит к сбросу буфера вывода (т.е. заставляет буфер немедленно вывести данные, даже если он полностью не заполнен). Сброс буфера вывода может быть также выполнен оператором:

cout flush;

Манипуляторы потоков детально обсуждаются в разделе 11.6. Пример вывода значения выражения показан на рис. 11.6.

Хороший стиль программирования 11.2

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

figll 05.cpp

Использование манипулятора потока endl # include <iostream.h>

main() {

cout Добро пожаловать в ; cout мир С++ ! ;

cout endl; манипулятор потока конец строки

return 0;

Добро пожаловать в мир С++ !

Рис. 11.5. Использование манипулятора потока endl

figll 04.cpp

Вывод строки двумя операциями поместить в поток



1 ... 210 211 212 [ 213 ] 214 215 216 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика