Язык С++ и программирование на нем. Рейзлин В.И. - 183 стр.

UptoLike

Составители: 

185
while (ifs.eof()) { ifs.get(c);
// Контроль состояния потока
if (ifs.fail ()) {cout << ”Ошибка \n”; break;
} cout << с;
}
ifs.close();
}
return 0;
}
В этом примере осуществляется ввод символов из файла, заданно-
го в командной строке при запуске программы. Если при извлечении
символов встречается ошибка, чтение прекращается и выводится сооб-
щение об этом.
27.10. Перегрузка операций извлечения и вставки
Одним из главных преимуществ потоков ввода-вывода является
их расширяемость для новых типов данных. Можно реализовать опера-
ции извлечения и вставки для своих собственных типов данных. Чтобы
избежать неожиданностей, ввод-вывод для определенных пользовате-
лем типов данных должен следовать тем же соглашениям, которые ис-
пользуются операциями извлечения и вставки для встроенных типов
данных. Рассмотрим пример перегрузки операций извлечения и вставки
в поток для определенного пользователем типа данных, которым явля-
ется следующий класс даты:
class Date {
public:
Date(int d, int m, int y);
Date(const tm & t);
Date();
private:
tm tm_date;
};
Этот класс содержит член типа tm, который представляет собой
структуру для хранения даты и времени, определенную в заголовочном
файле time.h. Чтобы осуществить ввод-вывод пользовательского типа
данных, какими являются объекты класса Date, нужно перегрузить опе-
рации извлечения и вставки в поток для этого класса. Приведем соот-
ветствующее объявление класса Date: