#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.
Комментариев нет:
Отправить комментарий