Скачиваний:
189
Добавлен:
05.07.2021
Размер:
16.53 Mб
Скачать

9. Класс exception. Методы класса exception. Использование наследования класса exception. Пример использования.

Многие классы и операторы из стандартной библиотеки С++ выбрасывают классы-исключения при сбое. Например, оператор new и std::string могут выбрасывать std::bad_alloc при нехватке памяти. Неудачное динамическое приведение типов с помощью dynamic_cast выбрасывает исключение std::bad_cast и т.д. Начиная с C++14, существует 21 классы-исключения, которые могут быть выброшены, в C++17 их ещё больше.

Хорошей новостью является то, что все эти классы-исключения являются дочерними классу std::exception. std::exception — это небольшой интерфейсный класс, который используется в качестве родительского класса для любого исключения, которое выбрасывается в стандартной библиотеке C++.

В большинстве случаев, если исключение выбрасывается стандартной библиотекой С++, нам всё равно, будет ли это неудачное выделение, конвертирование или что-либо другое. Нам достаточно знать, что произошло что-то катастрофическое, из-за чего в нашей программе произошёл сбой. Благодаря std::exception мы можем настроить обработчик исключений типа std::exception, который будет ловить и обрабатывать как std::exception, так и все (21+) дочерние ему классы-исключения!

Библиотечные классы исключений определены в четырех заголовках:

– в заголовке exception определен общий класс исключения exception. Он сообщает только о том, что исключение произошло, но не предоставляет

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

– в заголовке stdexcept определено несколько универсальных классов исключений (таблица 1).

– в заголовке new определен класс исключения bad_alloc.

– в заголовке type_info определены классы исключения bad_cast,

bad_typeid.

В некоторых классах определен только конструктор по умолчанию,

поэтому невозможно будет инициализировать объекты этих типов.

Поведение исключений других типов прямо противоположно: их можно

инициализировать объектом класса string или строкой в стиле С, для

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

В классах исключений определена только функция what(). Она не

получает никаких аргументов и возвращает константный указатель на тип

char. Это указатель на символьную строку в стиле С, содержащую текст

описания переданного исключения.

Содержимое символьного массива, указатель на который возвращает

функция what(), зависит от типа объекта исключения. Для типов, которым

при инициализации передают строку класса string, функция what()

возвращает строку.

10. Классы исключений заголовка stdexcept. Семейство классов исключений logic_error: domain_error, invalid_argument, length_error, out_of_range. Особенности и примеры использования этих классов. Семейство классов исключений runtime_error: underflow_error, range_error, overflow_error. Особенности и примеры использования этих классов.

см. вопр. 9, 6