Diferencia entre revisiones de «Programación en C++/Excepciones»

Contenido eliminado Contenido añadido
Añadido contenido
Línea 42:
= Control de excepciones =
<div style="background:#fffeee; text-align:justify; padding:40px">
Una excepción es un error que puede ocurrir debido a una mala entrada por parte del usuario, un mal funcionamiento en el hardware, un argumento inválido para un cálculo matemático, etc. EnPara finremediar esto, el programador debe estar atento y escribir los algoritmos necesarios para evitar a toda costa que un error de excepción pueda hacer que el programa se interrumpa de manera inesperada. C++ soporta una forma más elegantedirecta y fácil de ver tanto para el programador como para los revisores del código en el manejo de excepciones que su contrapartesímil en el C estándar y esta consiste, tratándose del lenguaje C++, en el mecanismo <b>try</b>, <b>throw</b> y <b>catch</b>.


La lógica del mecanismo mencionado consiste en:
#Dentro de un bloque <b>try</b> se pretende evaluar una o más expresiones y si dentro de dicho bloque se produce un error'''algo que no se espera''' se lanza por medio de <b>throw</b> launa excepción, la misma que deberá ser capturada por un <b>catch</b> específico.<br><br>
#Puesto que desde un bloque <b>try</b> pueden ser lanzados diferentes tipos de errores de excepción es que puede haber más de un <b>catch</b> para capturar a cada uno de los mismos.<br><br>
#Si desde un <b>try</b> se lanza una excepción y no existe el mecanismo <b>catch</b> para tratar dicha excepción el programa se '''interumpirá''' abruptamente despues de haber pasado por todos los catchs que se hayan definido y de no haber encontrado el adecuado.<br><br>
#Los tipotipos de errorresexcepciones lazados pueden ser de un tipo primitivo tal como: <b>int</b>, <b>float</b>, <b>char</b>, etc. aunque normalmente las exepciones son lanzadas por alguna clase escrita por el usuario o por una clase de las que vienen incluidas con el compilador.<br><br>
En el programa que se listará en seguida se muestra un ejemplo de como lanzar una excepción de tipo <b>int</b> dentro del bloque <b>try</b>, y como capturar el error por medio de <b>catch</b>.
<br>'''Ejemplo'''<br>
<source lang=cpp>
<source lang=cpp style="font-size:14px;">
// Demostración: de los comandos try, throw y catch
#include <iostream>
 
using namespace std;
// Función: main
 
// Recibe: void
int main()
// Devuelve: int
// En la función principal se tratarán los comandos try, throw y catch
try {
int main(void)
throw 125;
{
}
try // Se intenta hacer el siguiente código
catch(int) {
{
cout << "Error tipo entero capturado" << endl;
// Aquí puede ir más }código...
throw 125; //...aunque directamente en este caso se lanza una excepción.
 
}
cin.get();
catch(int) // Se captura con un catch de enteros (podría usarse long o char, por ejemplo)
return 0;
{
}</source>
std::cout << "Ha surgido una excepción de tipo entero" << std::endl; // y se muestra por pantalla
}
std::cin.get(); // Y el programa finaliza.
return 0;
}
</source lang=cpp>
 
== Excepciones genéricas ==
Como ya hemosse ha mencionado, los errores pueden deberse a una multitud de situaciones muchas veces inesperadas, por tal motivo, en C++ existe una forma de manejar excepciones desconocidas ( genéricas ) y es buena idea que si ustedse estaestá escribiendo un controlador de erroresexcepciones incluya un <b>catch</b> para capturar erroresexcepciones inesperadosinesperadas. Por ejemplo, en el siguiente progama se escribe un <b>catch</b> que tratará de capturar cualquier errorexcepción inesperadoinesperada. Observe que la sintaxis para declarar un catch general es:<br>
<pre>catch(...) { bloque de instrucciones }</pre>
<source lang=cpp>
// Demostración: try, throw y catch