Для приведенного ниже кода результатом является «EA Exception Finished», что означает, что мы выбрали производный класс, который он поймал базовым классом. Это всегда? И если да, то как я могу сделать уловы производного класса, таким образом появляется «EB Exception Finished»?Зачем бросать на уловы производного класса по базе?
Также я не могу точно понять, что это означает: throw EB()
и catch(EA&)
. И делает catch(EA&)
означает, что блок catch получает ссылку для EA объект?
Извините за мое невежество. Если вы порекомендуете мне книгу или что-то, чтобы ссылаться на структуру исключений, это будет большой помощью.
class EA {};
class EB: public EA {};
void F()
{
throw EB(); // throw at EB().
}
int main()
{
try
{
F();
}
catch(EA&) // caught here??
{
std::cout<<"EA Exception";
}
catch(EB&) // why not me? every time?
{
std::cout<<"EB Exception";
}
std::cout<<" Finished"<<std::endl;
return 0;
}
Исключение всегда попадает в блок * catch * *, который * может * поймать его, поэтому ваш заказ неверен. –
Большое спасибо за ваш ответ !!! –