Excepción personalizada definida por el usuario con clase en C++

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *