
- •1. Комментарии
- •2. Константы
- •3. Встраиваемые функции Встраиваемые функции
- •4. Объявление структур, объединений и перечислений
- •5. Объявление переменных
- •5. Ссылки Что такое ссылка и что с ней можно делать
- •Ссылку можно рассматривать как еще одно имя объекта. В основном ссылки используются для задания параметров и возвращаемых функциями значений, а также для перегрузки операций.
- •6. Использование спецификатора void
- •7. Преобразование стандартных типов данных.
- •8. Новые операции new, delete, операция расширения области видимости
- •1. Операция new
- •2. Операция delete
- •3. Операция :: области видимости
- •9. Объявление функций. Аргументы по умолчанию
- •10. Перегрузка функций
- •Когда использовать перегрузку
- •Новые возможности по сравнению с Си
- •Объектно-ориентированные особенности языка
- •Две роли классов
- •Поля класса
- •Конструкторы класса
- •13. Перегрузка операций
- •Перегрузка операций
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Перегрузка операции присваивания
- •Перегрузка операции приведения типа
- •14. Дружественные функции
- •15. Сходства и различия классов, структур и объединений.
- •Отличия структур и объединений от классов
- •16. Классы и объекты. Определение класса и области видимости. Опережающее объявление класса
- •Две роли классов
- •Поля класса
- •17. Использование спецификатора класса памяти static. Статические компоненты класса
- •18. Константные объекты и константные методы
- •19. Неявный указатель this
- •20. Указатели на член класса
- •21. Локальные и вложенные классы
- •22. Специальный вид методов класса - конструкторы и деструкторы. Некоторые особенности конструкторов и деструкторов Конструкторы класса
- •23. Классы, содержащие объекты других классов
- •24. Создание объектов с различным временем жизни
- •25. Массивы объектов класса
- •26. Особенности копирования объектов Конструктор копирования
- •27. Заготовка класса без наследников
- •28. Пример вектора с неповерхностным копированием.
- •29. Излишнее копирование. Конструктор копии. Операции присваивания.
- •1. Излишнее копирование
- •2. Конструктор копирования
- •3. Операции присваивания
- •30. Преобразование типов. Стандартные преобразования. Явное преобразование типов
- •Преобразования указателей и ссылок
- •Явные преобразования типов
- •Неявное преобразование типа
- •31. Преобразования абстрактных типов данных (преобразование типов данных, созданных программистом)
- •32. Наследование классов
- •33. Доступ к наследуемым членам класса
- •34. Стандартные преобразования типов при наследовании
- •35. Инициализация объекта порожденного класса. Конструктор копии. Операция присваивания.
- •3. Операции присваивания
- •37. Виртуальные функции. Объявления виртуальных функций. Чисто виртуальные функции
- •Методы(функции)
- •38. Таблица виртуальных функций. Случаи, когда вызов виртуальной функции не будет виртуальным. Виртуальные деструкторы
- •39. Ввод-вывод файлов. Потоки ввода-вывода. Библиотека ввода-вывода (iostream). Группы классов библиотеки ввода вывода
- •40. Краткая характеристика иерархии классов производных от conbuf.
- •Класс conbuf (constrea.H)
- •Функции-элементы
- •41. Иерархия классов производных от ios
- •42. Состояния потока. Ошибки потоков. Состояние потока
- •С каждым потоком связан набор флагов, которые управляют форматированием потока. Они представляют собой битовые маски, которые определены в классе ios как данные перечисления. Манипуляторы
- •Шаблоны и наследование. Шаблоны и конфигурация компиляторов. Достоинства и недостатки шаблонов.
- •Совместное использование шаблонов и наследования
- •Достоинства и недостатки шаблонов
- •Исключения Применение try, catch, throw
- •47. Обработка исключительных ситуаций. Обработка завершения. Обработка структурных исключений, заявление исключения, фильтрующие выражение. Исключительные ситуации
- •Обработка исключительных ситуаций
- •Обработчик завершения
- •48. Стратегии взаимодействия объектов в программе. Программа как система взаимодействующих объектов. Система объектов, управляемых сообщениями
- •1. Программа, как система взаимодействия объектов.
- •49. Элементы объектно-ориентированного анализа и объектно-ориентированного проектирования. Диаграммы классов. Отношения классов: ассоциация, наследование, агрегация, использование.
- •51. Элементы объектно-ориентированного анализа и объектно-ориентированного проектирования. Диаграммы объектов, назначения, отношения между объектами. Диаграммы объектов (object diagrams)
47. Обработка исключительных ситуаций. Обработка завершения. Обработка структурных исключений, заявление исключения, фильтрующие выражение. Исключительные ситуации
В языке Си++ реализован специальный механизм для сообщения об ошибках – механизм исключительных ситуаций. Название, конечно же, наводит на мысль, что данный механизм предназначен, прежде всего, для оповещения об исключительных ситуациях, о которых мы говорили чуть ранее. Однако механизм исключительных ситуаций может применяться и для обработки плановых ошибок.
Исключительная ситуация возникает при выполнении оператора throw . В качестве аргумента throw задается любое значение. Это может быть значение одного из встроенных типов (число, строка символов и т.п.) или объект любого определенного в программе класса.
При возникновении исключительной ситуации выполнение текущей функции или метода немедленно прекращается, созданные к этому моменту автоматические переменные уничтожаются, и управление передается в точку, откуда была вызвана текущая функция или метод. В точке возврата создается та же самая исключительная ситуация, прекращается выполнение текущей функции или метода, уничтожаются автоматические переменные, и управление передается в точку, откуда была вызвана эта функция или метод. Происходит своего рода откат всех вызовов до тех пор, пока не завершится функция main и, соответственно, вся программа.
Обработка исключительных ситуаций
В программе можно объявить блок, в котором мы будем отслеживать исключительные ситуации с помощью операторов try и catch :
try {
...
}catch (тип_исключительной_операции){
...
}
Если внутри блока try возникла исключительная ситуация, то она первым делом передается в оператор catch . Тип исключительной ситуации – это тип аргумента throw . Если тип исключительной ситуации совместим с типом аргумента catch , выполняется блок catch . Тип аргумента catch совместим, если он либо совпадает с типом ситуации, либо является одним из ее базовых типов. Если тип несовместим, то происходит описанный выше откат вызовов, до тех пор, пока либо не завершится программа, либо не встретится блок catch с подходящим типом аргумента.
В блоке catch происходит обработка исключительной ситуации.
Ссылка на аргумент throw передается в блок catch . Этот блок гасит исключительную ситуацию. Во время обработки в блоке catch можно создать либо ту же самую исключительную ситуацию с помощью оператора throw без аргументов, либо другую, или же не создавать никакой. В последнем случае исключительная ситуация считается погашенной, и выполнение программы продолжается после блока catch .
С одним блоком try может быть связано несколько блоков catch с разными аргументами. В этом случае исключительная ситуация последовательно "примеряется" к каждому catch до тех пор, пока аргумент не окажется совместимым. Этот блок и выполняется. Специальный вид catch
catch (...)
совместим с любым типом исключительной ситуации. Правда, в него нельзя передать аргумент.
Аббревиатура SEH - это Structured exception handling. Этот механизм обработки исключений отличается от обработки исключений в С++. Он разработан специально для Windows и реализован в Visual C++. Естественно, как у каждого альтернативного метода у него есть свои плюсы и минусы. Помните мы говорили про исключения С++, что если они выбрасываются, то при обработке исключений SEH они возбуждаются. Так вот выбрасывание исключения всегда производится программным путем, а возбуждении исключения может быть программным или аппаратным. Когда возбуждается исключительная ситуация задается ее код, который можно рассматривать как тип фильтр может обрабатывать код, чтобы по разному организовать обработку. SEH предоставляет два механизма.
-
Обработку завершения termination handling
-
Обработку исключения exception handling
Общая идея обработки похожа. Код заключается в блок обработки __try, но в отличии от C++ обработки дальше может следовать один из двух блоков обработки, это либо __finaly либо __except блок. Естественно понятно, что к чему. Слово ФИНИШ даже школьники употребляют, так что __finaly понятно - все приехали. А вот взаимная вложенность допускается. Синтаксически это оформляется так:
#include "stdafx.h"
void main()
{
__try
{
}
__finally
{
}
}
Исключение может возбуждаться в теле __try, как внутри блока так и в функциях внутри его явно или неявно вызванных. Главная особенность __finally в том, что его работа не зависит от реализации блока __try, так как он обязательно должен выполниться в случае непредвиденной ситуации, закрыть файлы, освободить память и все там такое.
Фильтры
Фильтрующее выражение должно принимать одно из трех значений:
EXCEPTION_EXECUTE_HANDLER
EXCEPTION_CONTINUE_SEARCH
EXCEPTION_CONTINUE_EXECUTION
Они соответствуют исполнению данного обработчика, продолжению поиска (стек разматывается, и поиск обработчика переходит на более высокий уровень) и продолжению выполнения программы с той точки, где было возбуждено исключение.
SEH предоставляет обработчики двух типов:
-
Обработка завершения
-
Обработка исключений