Por que jogar em capturas de classe derivada por base?
Para o código abaixo, o resultado é "Exceção EA concluída", o que significa que, embora tenhamos jogado na classe derivada, ela foi capturada pela classe base. Sempre? E se sim, como posso fazer a captura da classe derivada, assim "Exceção EB concluída" aparece?
Também não consigo entender exatamente o que significathrow EB()
ecatch(EA&)
. E fazcatch(EA&)
significa que o bloco catch recebe uma referência para o EAobjeto?
Desculpe pela minha ignorância. Se você me recomendar um livro ou algo sobre a estrutura de exceções, seria uma grande ajuda.
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;
}