Программирование >>  Инициализация объектов класса, структура 

1 ... 348 349 350 [ 351 ] 352 353 354 ... 395


проверить, находится поток is в хорошем состоянии ошибки:

while ( is && ( ch = is.get() ) != lbrace)

Если объект istream не в хорошем состоянии, то его значение будет равно false. (О состояниях потока mi расскажем в разделе 20.7.)

Данная программа считывает объект класса WordCount, сохраненный оператором вывода

#include <iostream> #include WordCount.h

int main() {

WordCount readIn;

operator>>( cin, readIn ) cin >> readIn;

if ( !cin ) {

cerr << Сшибка ввода WordCount << endl;

return -1; }

operator<<( cout, readIn cout << readIn << endl;

из предыдущего раздела:

Выводится следующее:

<10> rosebud

<11,3> <11,8> <14,2> <34,6> <49,7> <67,5> <81,2> <82,3> <91,4> <97,8>

Упражнение 20.9

Оператор ввода класса WordCount сам читает объекты класса Location. Вынесите этот код в отдельный оператор ввода класса Location.

поток, чтение из которого невозможно из-за неправильного формата, переводится в состояние fail:

is.setstate( ios base::failbit );

операции вставки и извлечения из потока, находящегося в ошибочном состоянии, не работают:

while (( ch = is.get() ) != lbrace)

Инструкция зациклится, если объект istream будет находиться в ошибочном состоянии. Поэтому перед каждым обращением к get() проверяется отсутствие



по умолчанию открывается в режиме вывода файла outfile2 эквивалентно приведенному выше:

ofstream outfile2( copy.out );

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

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

if ( ! outfile ) { открыть файл не удалось

cerr << не могу открыть copy.out для записи\n ;

exit( -1 ); файл был успешно открыт:

Класс ofstream является производным от ostream. Все определенные в ostream

char ch = ;

outFile.put( 1 ).put( ) ).put( ch );

операции применимы и к ofstream. Например, инструкции

outFile << 1 + 1 = << (1 + 1) << endl;

Упражнение 20.10

Реализуйте оператор ввода для класса Date из упражнения 20.7 в разделе 20.4. Упражнение 20.11

Реализуйте оператор ввода для класса CheckoutRecord из упражнения 20.8 в разделе

20.4.

20.6. Файловый ввод/вывод

Если программе необходимо работать с файлом, то следует включить в нее заголовочный файл fstream (который в свою очередь включает iostream):

#include <fstream>

Если файл будет использоваться только для вывода, мы определяем объект класса ofstream. Например:

ofstream outfile( copy.out , ios::base::out );

Передаваемые конструктору аргументы задают имя открываемого файла и режим открытия. Файл типа ofstream может быть открыт либо - по умолчанию - в режиме вывода (ios base::out), либо в режиме дозаписи (ios base::app). Такое определение



#include <fstream>

int main() {

открыть файл copy.out для вывода ofstream outFile( copy.out );

if ( ! outFile ) {

cerr << Не могу открыть copy.out для вода\n ; return -1;

char ch;

while ( cin.get( ch ) )

outFile.put( ch );

стандартный вывод:

К объекту класса ofstream можно применять и определенные пользователем экземпляры оператора вывода. Данная программа вызывает оператор вывода класса WordCount из

#include <fstream> #include WordCount.h

int main() {

открыть файл word.out для вывода

ofstream oFile( word.out );

здесь проверка успешности открытия ...

создать и вручную заполнить объект WordCount WordCount artist( Renoir );

artist.found( 7, 12 ); artist.found( 34, 18 );

вызывается оператор (ostream&, const WordCount&); oFile << artist;

предыдущего раздела:

Чтобы открыть файл только для чтения, применяется объект класса ifstream, производного от istream. Следующая программа читает указанный пользователем файл и копирует его содержимое на стандартный вывод:

выводят в файл outFile последовательность символов:

[ТТ 1 + 1 = 2 I

Следующая программа читает из стандартного ввода символы и копирует их в



1 ... 348 349 350 [ 351 ] 352 353 354 ... 395

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