|
Программирование >> Структурное программирование
figl4 17.cpp Демонстрация объекта класса ostrstream, использующего заранее определенный массива, tinclude <iostream.h> tinclude <strstream.h> main ( ) { const int size = 15; char buffer[size]; ostrstream outputString(buffer, size, ios::out); cout << Состояние потока outputString перед помещением в него данных: outputString.rdstate() endl; outputString Проверка 123 ends; cout Содержимое буфера: endl buffer; outputString ПОПЫТКА ВСТАВИТЬ ПОСЛЕ КОНЦА МАССИВА ; cout endl endl Состояние outputString после попытки endl вставки после конца строки: outputString.rdstateО endl; return 0; Состояние потока outputString перед помещением в него данных: О Содержимое буфера: Проверка 123 Состояние outputString после попытки встгквки после конца строки: 4 Рис. 14.17. Демонарация объекта класса ostrstream, использующего заранее определенный массив Состояние потока outputString перед помещением в него данных: О Состояние outputString после вызова str и слвдужяцей попытки помещения дгшных в поток:4 Динамически соаданная строка содержит: Вывод нескольких типов данных в объект класса ostrstream: double: 123.4567 int: 22 адрес int: 0x8e80ffe0 Рис. 14.16. Использование динамически размещаемого объекта класса ostrstream (чааь 2 из 2) figl4 18.cpp Демонстрация ввода из объекта класса istrstream. tinclude <iostream.h> tinclude <strstream.h> mainO const int size = 80; char input [size] = Введите тест 123 4.7 A ; istrstream inputBuffer(input, size); cout << Состояние inputBuffer перед операцией извлечения: inputBuffer.rdstateО endl endl; Рис. 14.18. Демонарация ввода из объекта класса istrstream (часть 1 из 2) Рис. 14.17 демонстрирует использование объекта класса ostrstream с заранее определенным массивом. Объявление ostrstream outputString (buffег, size, ios::out); создает объект ostrstream, который будет использовать символьный массив buffer с количеством элементов size для хранения вывода, направляемого в поток outputString. Поскольку размер массива известен заранее, поток outputString может осуществить свой собственный поиск ошибок. Если предпринимается попытка вывести данные в поток outputString, причем данные должны храниться за концом массива buffer, тогда будет установлен failbit (это обсуждалось в главе 11) и операция вывода не выполнится. Программа выводит строку, целое и завершающий нулевой символ в buffer, а затем выводит содержимое buffer. Программа проверяет состояние потока output-String перед помещением в него информации и вслед за попыткой поместить информацию после конца массива buffer. Объект istrstream вводит данные из символьного массива в памяти в переменные программы. Данные хранятся в объекте istrstream как символы; ввод из объекта istrstream работает аналогично вводу из любого файла или из стандартного входного потока. Завершающий нулевой символ интерпретируется этим объектом как eof. Рис. 14.18 демонстрирует ввод из объекта istrstream. Объявление istrstream inputBuffer(input, size); создает объект inputBuffer класса istrstream. Два аргумента задают массив (input), из которого данные считываются, и число элементов в массиве (size). Входной массив содержит следующие данные: Введите тест 123 4.7 А которые при считывании в программу в качестве входных данных состоят из двух строк ( Введите и тест ), целого значения (123), значения с плавающей точкой (4.7) и символа (А). Эти данные вводятся в переменные stringl, string2, i, d и с соответственно операцией извлечь из потока, а затем выводятся в cout. Программа проверяет состояние потока inputBuffer перед попыткой извлечения или после нее, пока не остается данных во входном массиве input. char stringl [size], string2 [size]; int i; double d; char c; inputBuffer stringl string2 i d c; cout Извлекаются следующие данные endl << из объекта класса istrstream: endl Строка: д! ; Строка: Integer: Double: Char: stringl endl string2 endl i endl d endl с endl endl; Попытка чтения из пустого потока long 1; inputBuffer 1; cout Состояние inputBuffer после извлечения из пустого потока: inputBuffer.rdstateО endl; return 0; } Состояние inputBuffer перед операцией извлечения: О Извлекаются следующие данные иэ обгьекта класса istrstream: Строка: Введите Строка: тест Integer: 123 Double: 4.7 Char: А Состояние inputBuffer после извлечения из пустого потока: 2 Рис. 14.18. Демонстрация ввода из объекта класса istrstream (часть 2 из 2) 14.13 Ввод-вывод объектов в этой главе и главе 11 мы обсуждали объектно-ориентированный стиль ввода-вывода в языке С++. Но наши примеры были посвяш;ены вводу-выводу традиционных типов данных, а не объектов определенных пользователем классов. В главе 8 мы увидели, как вводить и выводить объекты классов, используя перегрузку операций. Мы рассмотрели ввод объекта с помощью перегрузки операции взять из потока для соответствующих классов istream. Мы также рассмотрели вывод объекта с помощью перегрузки операции поместить в поток для соответствующих классов ostream. В обоих случаях вводились и выводились только данные-элементы объекта и в обоих случаях в форме, ориентированной на объекты некоего абстрактного типа данных. Функции-элементы объекта внутренне доступны в компьютере и сочетаются со значениями данных, когда эти данные вводятся посредством перегруженной операции поместить в поток.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |