Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора 57стр.doc
Скачиваний:
54
Добавлен:
15.06.2014
Размер:
478.21 Кб
Скачать

Вопрос 34. Классы и объекты потоков ввода/вывода. Иерархия потоковых классов.

Система ввода/вывода основ на потоках. Поток – абстрактное понятие, означ перенос информации от источника к приёмнику.

Библиотека iostream содержит много классов для обработки широкого спектра операций ввода-вывода. Класс istream поддерживает операции по вводу потоков. Класс ostream поддерживает операции по выводу потоков. Класс iostream поддерживает оба типа операций: и ввод и вывод потоков.

Класс istream и класс ostream являются производными классами прямого наследования базового класса ios. Класс iostream является производным классом множественного наследования классов istream и ostream.

Перегрузка операций обеспечивает удобную запись операций ввода-вывода. Операция сдвига влево («) перегружена для обозначения вывода в поток и называется операцией поместить в поток. Операция сдвига вправо (») перегружена для обозначения ввода потока и называется операцией взять из потока. Эти операции применяются к объектам стандартных потоков cin, cout, cerr и clog и обычно используются также с объектами потоков, тип к-ых определен пользователем.

Операция взять из потока означает, что значение целой переменной grade (если полагать, что переменная grade объявлена как целая типа int) должно быть введено из объекта cin в память: cin » grade;

не требуется никакой дополнительной информации для использования операции взять из потока.

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

никакой дополнительной информации не требуется.

Объект cerr класса ostream «привязан» к стандартному устройству вывода сообщений об ошибках. Выводимые потоки данных для объекта cerr являются небуферизованными.

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

При обработке файлов используются классы:

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

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

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

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

Вопрос 35, 38. Предопределённые потоковые объекты. Состояние ошибок потока.

Состояние потока может быть проверено с помощью битов класса ios — базового для классов istream, ostream и iostream, которые использe.ncz для ввода-вывода.

Ошибки потока:

Бит eofbit для входного потока автоматически устанавливается, когда встречается признак конца файла. Используется для определения в потоке признака конца файла. Вызов cin.eof() (возвращает true, если в cin встретился признак конца файла, и false в противном случае).

Бит failbit устанавливается для потока, если в потоке происходит ошибка форматирования, но символы не утеряны (обычно данные можно восстановить) - пользовательская ошибка.

Бит badbit устанавливается для потока при возникновении ошибки, к-ая приводит к потере данных (выполнена недопустимая опер-я).Данные обычно не восстанавливаются.

Бит goodbit устанавливается для потока, если ни один из битов eofbit, failbit и badbit не установлен (нет никаких ошибок). Возвращает true, если для данного потока все ф-ции bad, fail и eof должны вернуть false.

Функция-элемент rdstate возвращает состояние ошибки потока (читает состояние потока).

Функция-элемент clear обычно используется для восстановления потока в нормальное состояние (когда функция-элемент good возвращает истину), при котором можно продолжать операции ввода-вывода данного потока. По умолчанию параметр функции clear принимает значение ios::goodbit, так что оператор

cin.clear(); очистит входной поток cin и установит goodbit для этого потока. Оператор cin.clear(ios::failbit)устанавливает failbit.

Функция-элемент operator! возвращает истину в том случае, если установлен либо badbit, либо failbit, либо оба вместе. Функция-элемент operator void * возвращает false, если установлен либо badbit, либо failbit, либо оба вместе. Эти функции полезны при обработке файлов и проверке истин­ности или ложности условия в структуре выбора или в структуре повторения.

Hardfail – неисправимая ошибка

Функция eof() возвр int, если eofbit

Fail() возвр истину если Failbit Badbit Hardfail

Good() возвр истину если ошибок не было