Страницы

Поиск по вопросам

среда, 22 мая 2019 г.

перехват исключения производным классом

Объясните почему при вводе 0 и выбросе исключения Base, оно не отлавливается блоком Derived1?
int main() { int number = 0;
for (;;) { try { cin >> number; cout << number << " ";
switch (number) { case 0: throw Base();
case 1: throw Derived1();
case 2: throw Derived2(); } } catch (Derived1 /*exception*/) { cout << "Exception of derived class" << endl; } catch (Base /*exception*/) { cout << "Exception of Base class" << endl; } }
return 0; }


Ответ

Потому что Base не является Derived, а вот Derived является Base
Вот если бы вы написали (кстати, перехватывайте исключения по ссылке, иначе столкнетесь со срезкой)
catch (Base& /*exception*/) { cout << "Exception of Base class" << endl; } catch (Derived1& /*exception*/) { cout << "Exception of derived class" << endl; }
то тут и Base, и Derived ловились бы первым блоком - Base

Комментариев нет:

Отправить комментарий