- •1. Динамические структуры данных
- •2. Динамические структуры данных. Линейные списки: Очередь, стек.
- •3. Динамические структуры данных. Деревья
- •4. Классы. Описание классов. Описание объектов. Указатель this.
- •5. Статические элементы класса. Статические поля. Статические методы.
- •6. Дружественная функция. Дружественный класс.
- •7. Деструкторы
- •8. Перегрузка операций. Перегрузка унарных операций
- •9. Перегрузка бинарных операций
- •10. Перегрузка операций присваивания
- •11. Перегрузка операции приведение типа
- •12. Наследование. Ключи доступа. Простое наследование
- •13. Виртуальные методы. Алгоритмы позднего связывания
- •Механизм позднего связывания
- •14. Множественное наследование
- •15. Создание произвольного класса на базе основного
- •16. Обработка исключительных ситуаций. Общий механизм обработки исключений
- •17. Синтаксис исключений. Перехват исключений
- •18. Список исключений функций
- •19. Иерархии исключений
- •20. Исключения в конструкторах и деструкторах
- •21. Преобразование типов. Неявные преобразования типов
- •22. Преобразования типов в выражениях
- •23. Явные преобразования типов. Операция const_cast. Операция dynamic_cast
- •Операция const_cast
- •Операция dynamic_cast
- •24. Повышающее преобразование. Понижающее преобразование
- •25. Преобразование ссылок. Перекрестное преобразование
- •26. Преобразование типа на стадии компиляции. Операция static_cast. Операция reinterpret_cast
- •27. Динамическое определение типа. Операция type_id. Класс type_info
- •28. Потоки. Стандартные потоки. Объекты заголовочного файла iostream
- •29. Правила ввода и вывода величин
- •30. Форматирование данных. Флаги и форматирующие методы. Манипуляторы
- •31. Методы обмена с потоками. Класс iоstream
- •32. Ошибки потоков
- •33. Базовый класс ios. Методы и операции класса ios
- •34. Файловые потоки. Классы для работы с файлами: ifstream, ofstream, fstream
- •35. Строковые потоки. Базовые классы строковых потоков: istringstream, ostringstream, stringstream
- •36. Потоки и типы, определенные пользователем
- •37. Строки. Конструкторы и присваивание строк
- •38. Создание объекта string. Операция присваивания строк
- •39. Операции класса string
- •40. Функции работы со строками. Присваивание и добавление частей строк
- •41. Функции работы со строками. Преобразование строк. Поиск подстрок. Сравнение частей строк
- •42. Функции работы со строками. Получение характеристик строк
- •43. Обратные итераторы. Итераторы вставки. Потоковые итераторы
- •Обратные итераторы
- •Итераторы вставки
- •Потоковые итераторы
- •44. Функциональные объекты. Арифметические функциональные объекты
32. Ошибки потоков
В базовом классе ios определено поле state, которое представляет собой состояние потока в виде совокупности битов:
enum iо_state {
goodbit = 0x00, / / Нет ошибок
eofbit = 0x01, / / Достигнут конец файла
fallbit = 0x02, / / Ошибка форматирования или преобразования
badbit = 0x04, / / Серьезная ошибка, после которой пользоваться потоком невозможно
hardfall = 0x08 / / Неисправность оборудования
}
Состоянием потока можно управлять с помощью перечисленных ниже методов и операций:
int rdstate() — возвращает текущее состояние потока;
int eof() — возвращает ненулевое значение, если установлен флаг eofbit;
int fail() - возвращает ненулевое значение, если установлен один из флагов failbit, badbit или hardfail;
int good() - возвращает ненулевое значение, если сброшены все флаги ошибок и др.
33. Базовый класс ios. Методы и операции класса ios
Классы ввода-вывода iostream рассматривают информацию, как побитовый поток данных. Если данные выводятся на экран или заносятся в файл, то источник их как правила находится в программе. Если поток направлен в противоположную сторону, то данные могут поступать либо с клавиатуры или из файла, В этом случае они заносятся в переменные.
Класс streambuf управляет буфером, его методы позволяют наполнить, опорожнить и очистить буфер;
Класс ios является базовым для классов ввода-вывода;
Классы istream и ostream являются произвольными от класса ios и отвечают соответственно за потоковый ввод и вывод данных;
Класс iosteam является произвольным от istream и ostream и обеспечивает методы ввода-вывода для печати на экран;
Классы fstream используются для ввода-вывода из файла.
34. Файловые потоки. Классы для работы с файлами: ifstream, ofstream, fstream
Под файлом обычно подразумевается именованная информация на внешнем носителе, например, на жестком или гибком магнитном диске.
Логически файл можно представить как конечное количество последовательных байтов, поэтому такие устройства, как дисплей, клавиатуру и принтер также можно рассматривать как частные случаи файлов.
По способу доступа файлы можно разделить на последовательные, чтение и запись в которых производятся с начала байт за байтом, и файлы с произвольным доступом, допускающие чтение и запись в указанную позицию.
Стандартная библиотека содержит три класса для работы с файлами:
ifstream — класс входных файловых потоков;
ofstream— класс выходных файловых потоков;
fstream — класс двунаправленных файловых потоков.
Эти классы являются производными от классов istream, ostream и iostream соответственно, поэтому они наследуют перегруженные операции « и » , флаги форматирования, манипуляторы, методы, состояние потоков и т. д.
Использование файлов в программе предполагает следующие операции:
создание потока;
открытие потока и связывание его с файлом;
обмен (ввод/вывод);
уничтожение потока;
закрытие файла.
Каждый класс файловых потоков содержит конструкторы, с помощью которых можно создавать объекты этих классов различными способами.
Конструкторы без параметров создают объект соответствующего класса, не связывая его с файлом:
ifstream();
ofstream();
fstream();
Конструкторы с параметрами создают объект соответствующего класса, открывают файл с указанным именем и связывают файл с объектом:
ifstream(const char *name, int mode = ios::in);
ofstreamCconst char *name, int mode = ios::out | ios::trunc);
fstream(const char *name, int mode = ios::in I ios::out);
Вторым параметром конструктора является режим открытия файла. Если установленное по умолчанию значение не устраивает программиста, можно указать другое, составив его из битовых масок, определенных в классе ios:
enum open_mode{
in = 0x01, // Открыть для чтения
out = 0x02, // Открыть для записи
ate = 0x04, // Установить указатель на конец файла
арр = 0x08, // Открыть для добавления в конец
trunk = 0x10, // Если файл существует, удалить
nocreate = 0x20, // Если файл не существует, выдать ошибку
noreplace = 0x40, // Если файл существует, выдать ошибку
binary = 0x80 // Открыть в двоичном режиме
};
