D derived;
try {
throw derived;
}
catch(B b) {
cout << "Перехват исключения базового класса.\n";
}
catch(D d) {
cout << "Этот перехват никогда не произойдет.\n";
}
return 0;
}
Поскольку здесь объект
Помимо рассмотренных, существуют и другие С++-средства обработки исключений, которые создают определенные удобства для программистов. О них и пойдет речь в этом разделе.
Иногда имеет смысл создать обработчик для перехвата всех исключений, а не исключений только определенного типа. Для этого достаточно использовать такой формат
catch (...) {
// Обработка всех исключений
}
Здесь заключенное в круглые скобки многоточие обеспечивает совпадение с любым типом данных.
Использование формата
// В этой программе перехватываются исключения всех типов.
#include
using namespace std;
void Xhandler(int test)
{
try {
if(test==0) throw test; // генерирует int-исключение
if(test==1) throw 'a'; // генерирует char-исключение
if(test==2) throw 123.23; // генерирует double-исключение
}
catch (...) { // перехват всех исключений
cout << "Перехват!\n";
}
}
int main()
{
cout << "НАЧАЛО\n";
Xhandler (0);
Xhandler (1);
Xhandler (2);
cout << "КОНЕЦ";
return 0;
}
Эта программа генерирует такие результаты.
НАЧАЛО
Перехват!
Перехват!
Перехват!
КОНЕЦ
Как видите, все три
Зачастую имеет смысл использовать инструкцию
/* Использование формата catch (...) в качестве варианта "все остальное".
*/
#include
using namespace std;
void Xhandler(int test)
{
try {
if(test==0) throw test; // генерирует int-исключение
if(test==1) throw 'a'; // генерирует char-исключение
if(test==2) throw 123.23; // генерирует double-исключение
}
catch(int i) {
// перехватывает int-исключение
cout << "Перехват " << i << '\n';
}
catch(...) {
// перехватывает все остальные исключения
cout << "Перехват-перехват!\n";
}
}
int main()
{
cout << "НАЧАЛО\n";
Xhandler(0);
Xhandler(1);
Xhandler(2);
cout << "КОНЕЦ";
return 0;
}
Результаты, сгенерированные при выполнении этой программы, таковы.
НАЧАЛО
Перехват 0
Перехват-перехват!
Перехват-перехват!
КОНЕЦ
Как подтверждает этот пример, использование формата