Зачем бросать в производные классы уловы по базе?

Для приведенного ниже кода результатом является «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;
}

Ответы на вопрос(5)

Ваш ответ на вопрос