Несколько блоков catch.
Иногда мы можем иметь несколько вариантов возвращаемого значения у throw, для них мы можем написать несколько различных блоков catch для обработки исключений
try
{
func();
}
catch (const int Exception_code)
{
//обработка ошибки 1
}
catch (const char* Exception_code)
{
//обработка ошибки 2
}
catch (const exception& ex)
{
//обработка ошибки 3
cout<<ex.what()<<endl; //название ошибки
}
Как это работает:
когда в блоке try срабатывает ключевое слово throw мы выходим из блока и аналогично конструкции switch case начинаем проверять принимаемые параметры у наших блоков catch.
Если catch с такими аргументами не нашелся, приложение сваливается в ошибку.
Важно: если написать catch с 3 точками, то мы поймаем все что угодно, что вызвало исключение
catch (…)
{
//обработка ошибки 4….N
}
Мы мы поймаем все оставшиеся исключительные ситуации.
В этом случае мы поймем что произошла исключительная ситуация, но не знаем подробностей, по сути аналог default у блока switch case .