¿Por qué lanzar a las capturas de clase derivadas por base?
Para el siguiente código, el resultado es "EA Exception Finished", lo que significa que aunque lanzamos a la clase derivada, la clase base la capturó. Es siempre? Y si es así, ¿cómo puedo hacer las capturas de clase derivadas para que aparezca "EB Exception Finished"?
Además, no puedo entender exactamente qué significathrow EB()
ycatch(EA&)
. Y lo hacecatch(EA&)
significa que el bloque catch obtiene una referencia para EAobjeto?
Perdón por mi ignorancia. Si me recomienda un libro o algo para referirme sobre la estructura de excepciones, sería de gran ayuda.
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;
}