#cpp #ооп #классы #исключения
Объясните почему при вводе 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; }
Ответы
Ответ 1
Потому что 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.
Комментариев нет:
Отправить комментарий