Excepciones de C++


Excepciones de C++

Al ejecutar código C++, pueden ocurrir diferentes errores: errores de codificación por parte del programador, errores debido a una entrada incorrecta u otros imprevistos.

Cuando ocurre un error, C++ normalmente se detendrá y generará un mensaje de error. El término técnico para esto es: C++ lanzará una excepción (arrojará un error).


C++ prueba y captura

El manejo de excepciones en C++ consta de tres palabras clave: try, throwy catch:

La trydeclaración le permite definir un bloque de código para probar errores mientras se ejecuta.

La throwpalabra clave genera una excepción cuando se detecta un problema, lo que nos permite crear un error personalizado.

La catchinstrucción le permite definir un bloque de código que se ejecutará si ocurre un error en el bloque de prueba.

Las palabras clave tryy catchvienen en pares:

Ejemplo

try {
  // Block of code to try
  throw exception; // Throw an exception when a problem arise
}
catch () {
  // Block of code to handle errors
}

Considere el siguiente ejemplo:

Ejemplo

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw (age);
  }
}
catch (int myNum) {
  cout << "Access denied - You must be at least 18 years old.\n";
  cout << "Age is: " << myNum;
}

Ejemplo explicado

Usamos el trybloque para probar algún código: si la agevariable es menor que 18, haremos throwuna excepción y la manejaremos en nuestro catchbloque.

En el catchbloque, detectamos el error y hacemos algo al respecto. La catch declaración toma un parámetro : en nuestro ejemplo usamos una intvariable ( myNum) (porque estamos lanzando una excepción de inttipo en el trybloque ( age)), para generar el valor de age.

Si no se produce ningún error (por ejemplo, si agees 20en lugar de 15, lo que significa que será mayor que 18), el catchbloque se salta:

Ejemplo

int age = 20;

También puede usar la throwpalabra clave para generar un número de referencia, como un número/código de error personalizado para fines de organización:

Ejemplo

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw 505;
  }
}
catch (int myNum) {
  cout << "Access denied - You must be at least 18 years old.\n";
  cout << "Error number: " << myNum;
}

Manejar cualquier tipo de excepciones (...)

Si no conoce el throw tipo utilizado en el trybloque, puede usar la sintaxis de "tres puntos" ( ...) dentro del catchbloque, que manejará cualquier tipo de excepción:

Ejemplo

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw 505;
  }
}
catch (...) {
  cout << "Access denied - You must be at least 18 years old.\n";
}