También podemos usar el manejo de excepciones con la clase. Incluso podemos lanzar una excepción de los tipos de clase definidos por el usuario . Para lanzar una excepción de, digamos , tipo de clase de demostración dentro del bloque de prueba , podemos escribir
throw demo();
Ejemplo 1: programa para implementar el manejo de excepciones con una sola clase
CPP14
#include <iostream> using namespace std; class demo { }; int main() { try { throw demo(); } catch (demo d) { cout << "Caught exception of demo class \n"; } }
Producción:
Caught exception of demo class
Explicación: En el programa hemos declarado una clase vacía. En el bloque try estamos lanzando un objeto de tipo clase demo . El bloque try captura el objeto y lo muestra.
Ejemplo 2: programa para implementar el manejo de excepciones con dos clases
CPP14
#include <iostream> using namespace std; class demo1 { }; class demo2 { }; int main() { for (int i = 1; i <= 2; i++) { try { if (i == 1) throw demo1(); else if (i == 2) throw demo2(); } catch (demo1 d1) { cout << "Caught exception of demo1 class \n"; } catch (demo2 d2) { cout << "Caught exception of demo2 class \n"; } } }
Producción:
Caught exception of demo1 class Caught exception of demo2 class
Manejo de excepciones con herencia:
El manejo de excepciones también se puede implementar con la ayuda de la herencia . En caso de herencia, el objeto lanzado por la clase derivada es capturado por el primer bloque catch.
Ejemplo:
CPP14
#include <iostream> using namespace std; class demo1 { }; class demo2 : public demo1 { }; int main() { for (int i = 1; i <= 2; i++) { try { if (i == 1) throw demo1(); else if (i == 2) throw demo2(); } catch (demo1 d1) { cout << "Caught exception of demo1 class \n"; } catch (demo2 d2) { cout << "Caught exception of demo2 class \n"; } } }
Producción:
Caught exception of demo1 class Caught exception of demo1 class
Explicación: el programa es similar al anterior, pero aquí hemos hecho demo2 como clase derivada para demo1 . Tenga en cuenta que el bloque catch para demo1 se escribe primero . Como demo1 es la clase base para demo2 , un objeto lanzado de la clase demo2 será manejado por first catch block.Es por eso que la salida como se muestra.
Manejo de excepciones con el constructor:
El manejo de excepciones también se puede implementar mediante el constructor . Aunque no podemos devolver ningún valor del constructor, podemos hacerlo con la ayuda del bloque try and catch .
Ejemplo:
CPP14
#include <iostream> using namespace std; class demo { int num; public: demo(int x) { try { if (x == 0) // catch block would be called throw "Zero not allowed "; num = x; show(); } catch (const char* exp) { cout << "Exception caught \n "; cout << exp << endl; } } void show() { cout << "Num = " << num << endl; } }; int main() { // constructor will be called demo(0); cout << "Again creating object \n"; demo(1); }
Producción:
Exception caught Zero not allowed Again creating object Num = 1
Explicación: cuando se lanza la excepción x = 0 y se llama al bloque catch . Y cuando x = 1 no se crea ninguna excepción.
Publicación traducida automáticamente
Artículo escrito por gyanendra371 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA