|
Программирование >> Структурное программирование
Заметим, что операция взять из потока является достаточно интеллектуальной , чтобы определить тип используемых данных. Если переменная 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 Вывод строки двумя операциями поместить в поток
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |