cpp-que-son-excepciones

Qué son y cómo usar excepciones en C++

Una excepción en C++ es un mecanismo que permite manejar errores o situaciones inesperadas durante la ejecución de un programa.

Cuando ocurre una excepción:

  • Puede ser capturada por un bloque try-catch
  • Si no es capturada, pasa a la función que invocó a la que genero el error

Si no hay un bloque try-catch que capture la excepción, esta va “subiendo”. Si nadie la gestiona, la excepción llegará a la función principal (lo normal es que el programa termine abruptamente).

Las excepciones en C++ se lanzan mediante objetos, que pueden ser de cualquier tipo, aunque es común lanzar objetos de tipos específicos. (como std::runtime_error o std::logic_error).

Lanzar una excepción

En C++, podemos lanzar una excepción utilizando la palabra clave throw. Esto nos permite indicar que ha ocurrido un error específico.

#include <stdexcept>

throw std::runtime_error("Ocurrió un error");

En este ejemplo, lanzamos una excepción de tipo std::runtime_error con un mensaje de error.

Este mensaje puede utilizarse luego en el bloque catch para identificar y manejar el error.

Excepciones predefinidas

En C++, existen varios tipos de excepciones predefinidas en la biblioteca estándar que permiten manejar errores comunes. Aquí algunos ejemplos:

Estas son solo algunas de las excepciones comunes en C++. La biblioteca estándar incluye más excepciones específicas para diversas situaciones.

Crear excepciones personalizadas en C++

En C++ también es posible definir excepciones personalizadas creando clases que hereden de una clase base de excepción, como std::exception.

#include <exception>
#include <string>

class MiExcepcion : public std::exception {
    std::string mensaje;
public:
    explicit MiExcepcion(const std::string& mensaje) : mensaje(mensaje) {}
    const char* what() const noexcept override {
        return mensaje.c_str();
    }
};

Aquí, MiExcepcion hereda de std::exception y redefine el método what() para proporcionar un mensaje de error personalizado.

Uso de una excepción personalizada

Podemos utilizar nuestra clase de excepción personalizada en un bloque try-catch como cualquier otra excepción:

#include <iostream>

int main() {
    try {
        throw MiExcepcion("Error en mi aplicación personalizada");
    } catch (const MiExcepcion& e) {
        std::cout << "Excepción personalizada capturada: " << e.what() << std::endl;
    }
    return 0;
}

En este caso, el mensaje de error de MiExcepcion se imprimirá en la consola.