Salida del siguiente programa
#include<iostream> using namespace std; class Base {}; class Derived: public Base {}; int main() { Derived d; try { throw d; } catch(Base b) { cout<<"Caught Base Exception"; } catch(Derived d) { cout<<"Caught Derived Exception"; } return 0; }
(A) Excepción derivada capturada
(B) Excepción base capturada
(C) Error del compilador
Respuesta: (B)
Explicación: si las clases base y derivada se capturan como excepciones, el bloque catch de la clase derivada debe aparecer antes que la clase base. Si ponemos la clase base primero, nunca se alcanzará el bloque catch de la clase derivada.
En Java, el propio compilador no permite capturar una excepción de clase base antes de derivarla. En C++, el compilador puede dar una advertencia al respecto, pero compila el código.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA