
- •1.Поняття наслідування. Ключі доступу.
- •2.Простое наследование
- •3.Віртуальні методи
- •4. Механізм пізнього зв'язування
- •5.Абстрактні класи
- •6.Множественное наследование
- •7. Обробка виключень. Загальний механізм обробки виключень. Синтаксис виключень.
- •Перехоплення виключень. Список виключень функції.
- •Несподівані виключення та їх обробка.
- •Виключення в конструкторах та деструкторах.
- •Ієрархія виключень.
- •Поняття шаблону функцій.
- •Перевантаження та спеціалізація шаблону функцій.
- •Поняття шаблону класів.
- •Конкретизація та спеціалізація шаблонів класів.
- •Контейнери бібліотеки stl. Види контейнерів. Загальні поля та методи контейнерів. Ітератори. Контейнеры
- •Итераторы
- •Послідовні контейнери. Характеристика операцій, що підтримуються послідовними контейнерами.
- •Вектор. Характеристика та приклад вектора.
- •Двостороння черга (deque). Характеристика та приклад deque.
- •Список (list). Характеристика та приклад списку.
- •Стек. Характеристика та приклад стеку.
- •Операції зі стеком
- •Черга (queue). Характеристика та приклад черги.
- •Асоціативні контейнери. Загальна характеристика.
- •Словники (map). Приклад словника.
- •Множини (set). Приклад множини.
- •Бітова множина. Приклад.
Несподівані виключення та їх обробка.
Все неожиданные исключения обрабатываются одним и тем же единственным обработчиком unexpected.
Стандартная библиотека определяет обработчик, который вызывается по умолчанию, при возникновении любого неожиданного исключения. Вы можете переопределить этот обработчик взамен на ваш собственный, но также как и для обработчика, используемого по умолчанию, библиотека будет вызвать ваш обработчик для всех неожиданных исключений.
В отличие от нормальных обработчиков исключений, таких как
catch (int)
{
}
Обработчик unexpected не «перехватывает» исключение. Начав выполняться, обработчик знает только то, что произошло некоторое неожиданное исключение. Обработчик игнорирует тип исключения и место его происхождения и даже не может обратиться к библиотеке за помощью: никакая из функций библиотеки и никакой объект библиотеки не сохраняет информацию об исключении. В лучшем случае обработчик unexpected может перебросить управление другому участнику, который может дать больше ответов. Рассмотрим код
#include <exception>
using namespace std;
void my_unexpected_handler()
{
throw 1;
}
void f() throw(int)
{ throw 1L; // ой! -- *плохая* функция
}
int main()
{
set_unexpected(my_unexpected_handler);
try
{
f();
}
catch (...)
{
}
return 0;
}
f возбуждает исключение, которое функция обещала не возбуждать. В результате будет вызван my_unexpected_handler. Этот обработчик не имеет никакого понятия почему он был вызван на выполнение. Его единственное полезное назначение — кроме завершения программы — состоит в том, чтобы возбудить другое исключение, в надежде на то, что новое исключение совместимо с нарушенной спецификацией, и что некоторые другие части программы перехватывают новое исключение.
В этом примере исключение типа int в обработчике my_unexpected_handler полностью соответствует нарушенной спецификации и main успешно перехватит его.
Виключення в конструкторах та деструкторах.
Ієрархія виключень.
Существует два типа исключений: исключения, созданные исполняемой программой, и исключения, созданные общеязыковой средой выполнения. Кроме того, существует иерархия исключений, которые могут быть созданы приложением или средой выполнения.
Класс Exception является базовым классом для исключений. Несколько классов исключений наследуются непосредственно от Exception, в том числеApplicationException и SystemException. Эти два класса образуют основу почти для всех исключений среды выполнения.
Большинство исключений, полученных непосредственно из Exception, не добавляют функциональность к классу Exception. Например, иерархия класса InvalidCastException следующая:
Object Исключение SystemException InvalidCastException
Среда выполнения создает соответствующий производный класс SystemException при возникновении исключения. Эти ошибки возникают в результате сбоев при проверках, выполняемых средой выполнения (таких как ошибки выхода массива за границы диапазона), и могут возникать при выполнении любого метода. При разработке приложения, порождающего новые исключения, такие исключения следует создавать из класса Exception. Не рекомендуется перехватывать исключение SystemException или создавать исключение SystemException в пользовательских приложениях.
Наиболее серьезные исключения (создаются средой выполнения или в результате неустранимых условий) включают в себя ExecutionEngineException,StackOverflowException и OutOfMemoryException.
Исключения взаимодействия являются производными от SystemException и расширяются классом ExternalException. Например, COMException — это исключение, порождаемое в ходе операций COM-взаимодействия, производное от ExternalException. Классы Win32Exception и SEHException также являются наследниками ExternalException.
Иерархия
исключений среды выполнения
Среда выполнения имеет базовый набор исключений, производных от класса SystemException, которые порождаются при выполнении отдельных инструкций. В следующей таблице приведен список иерархии стандартных исключений, предоставляемых средой выполнения, а также указаны те условия, при которых следует создавать производный класс.
Тип исключения |
Базовый тип |
Описание |
Пример |
Исключение |
Объект |
Базовый класс для всех исключений. |
Отсутствует (используйте класс, производный от этого исключения). |
SystemException |
Исключение |
Базовый класс для всех ошибок, созданных средой выполнения. |
Отсутствует (используйте класс, производный от этого исключения). |
IndexOutOfRangeException |
SystemException |
Генерируется средой выполнения только при неправильной индексации массива. |
Индексирование массива вне его действительного диапазона: arr[arr.Length+1] |
NullReferenceException |
SystemException |
Создается средой выполнения только при ссылке на пустой объект. |
object o = null; o.ToString(); |
AccessViolationException |
SystemException |
Создается средой выполнения только при доступе к недопустимому участку памяти. |
Возникает при взаимодействии с неуправляемым кодом или с небезопасным управляемым кодом, а также при использовании неправильного указателя. |
InvalidOperationException |
SystemException |
Генерируется методами в случае недопустимого состояния. |
Вызов Enumerator.GetNext() после удаления Item из соответствующей коллекции. |
ArgumentException |
SystemException |
Базовый класс для всех исключений аргументов. |
Отсутствует (используйте класс, производный от этого исключения). |
ArgumentNullException |
ArgumentException |
Генерируется методами, для которых не допускается пустое значение аргументов. |
String s = null; "Calculate".IndexOf (s); |
ArgumentOutOfRangeException |
ArgumentException |
Генерируется методами, проверяющими принадлежность аргументов к заданному диапазону. |
String s = "string"; s.Chars[9]; |
ExternalException |
SystemException |
Базовый класс для исключений, происходящих или предназначенных для сред вне среды выполнения. |
Отсутствует (используйте класс, производный от этого исключения). |
ComException |
ExternalException |
Исключение, инкапсулирующее сведения HRESULT COM. |
Используется при взаимодействии COM. |
SEHException |
ExternalException |
Исключение, инкапсулирующее структурированные данные обработки исключений Win32. |
Используется в операциях с неуправляемым кодом. |