Типы исключений в C++
В языке программирования C++ существует не только тип exception, но и ряд производных типов исключений. Использоваться они могут в разных ситуациях. Рассмотрим эти типы подробнее:
Основная часть этих типов определена в stdexcept (заголовочном файле), за исключением класса bad_alloc, определяемом в new-файле, и класса bad_cast, определяемом в файле type_info.
Однако в отличие от классов exception, bad_cast и bad_alloc, в конструкторы прочих типов вы можете передать строку, передав таким образом сообщение об ошибке.
Что касается конструкции try...catch, то тут можно применять несколько блоков catch в целях обработки разных типов исключений. А в случае появления исключения для его обработки выберется как раз тот, который использует тип возникшего исключения.
Когда применяется несколько блоков catch, сначала помещают блоки catch, обрабатывающие более частные исключения, и лишь потом те блоки catch, которые имеют более общие типы исключений:
В нашем примере функция divide выбрасывает исключение типа runtime_error, когда параметр b равен 0. Инициализация такого исключения происходит с помощью сообщения об ошибке "Division by zero!".
Идем дальше: в функции main конструкция try..catch задействует 3 блока catch, при этом последний блок представляет, по сути, наиболее общий тип исключений exception. Второй блок выполняет обработку исключений типа runtime_error (производное от exception), а первый — обработку исключений типа overflow_error (производное от runtime_error).
Кроме того, все типы исключений имеют метод
По материалам https://metanit.com/cpp/.