Зачем бросать в производные классы уловы по базе?
Для приведенного ниже кода результатом является «EA Exception Finished», что означает, что, хотя мы бросили в производный класс, он пойман базовым классом. Это всегда? И если так, как я могу сделать уловки производного класса, таким образом появляется «EB Exception Finished»?
Кроме того, я не могу точно понять, что это значитthrow EB()
а такжеcatch(EA&)
, И делаетcatch(EA&)
означает, что блок catch получает ссылку для советникаобъект?
Извините за мое невежество. Если вы порекомендуете мне книгу или что-то, чтобы ссылаться на структуру исключений, это было бы здорово.
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;
}