Excepción personalizada en C++
![Excepción personalizada en C++](/img/Cpp/feature-image---cpp-custom-exception.webp)
Este breve tutorial de programación trata sobre la implementación de clases de excepción personalizadas en C++ y las reglas fundamentales para implementar clases de excepción definidas por el usuario en C++.
Manejo de excepciones en C++
En C++, el manejo de excepciones es un método para tratar problemas de tiempo de ejecución. Manejamos las excepciones para que se pueda mantener el flujo habitual de la aplicación incluso cuando ocurren problemas de tiempo de ejecución.
En C++, una excepción es un objeto lanzado durante el proceso de tiempo de ejecución y perturba la ejecución normal del programa.
La clase std::exception
es la raíz de todas las excepciones. Si no manejamos ninguna excepción, la aplicación imprimirá un mensaje de error y terminará.
Las excepciones permiten pasar el control de un área de programa a otra. Las tres palabras clave try
, catch
y throw
manejan las excepciones en C++.
throw
: si un segmento en su código puede causar un problema, lanzamos una excepción usando la palabra clavelanzar
y especificamos el tipo de excepción que puede ocurrir.try
: contiene ese segmento de código que puede causar un error y debe generar una excepción.catch
: el bloque llamado cuando se lanza una excepción. En este bloque de código, podemos informar al usuario sobre el error y finalizar el programa mediante programación si es necesario.
Un ejemplo común de excepciones es el error de dividir por cero
que ocurre en tiempo de ejecución. Es la excepción más frecuente en los programas.
Veamos el siguiente fragmento de código, que es propenso a esta excepción de tiempo de ejecución divide por cero
.
#include <iostream>
using namespace std;
float divideFunc(int a, int b) {
if (b == 0) {
throw "User made a division with zero!";
}
return (a / b);
}
int main() {
int num1 = 20;
int num2 = 0;
float result = 0;
try {
result = divideFunc(num1, num2);
cout << result << endl;
} catch (const char* msg) {
cout << msg << endl;
}
}
Producción:
Jerarquía de clases de excepción
La excepción
es una clase con muchas clases como subclases, y todas estas clases son los tipos de excepciones. C++ tiene un conjunto predefinido de tipos de excepciones comunes para usar fácilmente en los programas.
Excepción personalizada en C++
Las excepciones personalizadas no especificadas en C++ pueden ser beneficiosas para producir bajo circunstancias específicas. En C++, cualquier tipo que cumpla con ciertos criterios puede ser capturado o arrojado.
Estos incluyen el tipo que tiene un constructor y un destructor de copias válidos.
Las excepciones personalizadas ofrecen el mecanismo de manejo de excepciones con información útil sobre un problema. Pueden crearse creando una nueva clase con las propiedades necesarias y lanzando una instancia de esa clase o heredando de std::exception
y anulando la función what()
.
Supongamos que necesitamos ingresar el número positivo en nuestro programa. Podemos lanzar una excepción si se ingresa un número negativo.
Podemos hacer una clase de excepción personalizada de la siguiente manera.
class MyExceptionClass : public exception {
public:
const char* what() const throw() { return "Negative number not allowed\n"; }
};
Esto se puede capturar en el programa del controlador de la siguiente manera.
int main() {
try {
int a;
cout << "Enter a number : \n";
cin >> a;
if (a < 0) {
MyExceptionClass c;
throw c;
} else {
cout << "you entered: " << a << endl;
}
} catch (exception& e) {
cout << e.what();
}
}
Producción:
Podemos ver en el código anterior que hemos heredado nuestra clase de excepción personalizada con la clase Exception
y anulamos un método what()
que se llamará cuando se produzca la excepción.
Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.
LinkedIn