Manejo
de excepciones en c++
Definición.
El
lenguaje C++ incorpora soporte para manejar situaciones anómalas, conocidas
como excepciones, que pueden ocurrir durante la ejecución de un programa.
Las
excepciones proporcionan una manera limpia de verificar errores; esto es, sin
abarrotar el código básico de una aplicación utilizando sistemáticamente los
códigos de retorno de las funciones en
sentencias if para controlar los posibles errores que se puedan dar.
Tipos
de excepciones.
Todos
los tipos de excepción se corresponde con una clase de objetos, incluidos los
objetos de tipos predefinidos , como char, o de tipos derivados, como char *.
En general, se crea un nuevo tipo de excepción cuando se requiere manejar un
determinado tipo de error.
Class Cel
{
Public:
Const char * mostrarCausa()
const
{
Return “excepcion de tipo Cel”
}
};
Throw,
en una excepción equivale a crear un objeto temporal de ese tipo de excepción .
Void
Mifuncion()
{
//..
Throw
Cels(); // crea un objeto temporal de tio Cel
//..
}
Catch
es un manejador de excepción, solo se puede utilizar justamente a continuación
de un bloque try o de otro manejador de excepción (bloque
catch). Las sentencias try y catch, por definición, van seguidas de un bloque
que encierra el código relativo a cada
unas de ellas, razón por la
cual es obligatorio utilizar llaves.
En
el manejo de excepciones, cuando un error mientras se está ejecutando una función,
el método crea un valor , variable u objeto, el cual se conoce como excepcion,
que contiene información sobre el error en el punto en que ocurre. Esta
excepción es transmitida de inmediato, en el punto en que fue generada, al
código que se denomina manejador de excepciones, el cual está
diseñado para ocuparse de la excepción. El proceso de generar y
transmitir la excepción en el punto en que se detecto el error y luego regresar
el control de nuevo a la función de modo que pueda completar su tarea. En general hay dos tipos de errores
fundamentales pueden causar excepciones en C++, aquellos que resultan de una
incapacidad del programa para obtener un recurso requerido, y aquellos que
resultan de datos defectuosos. Son ejemplos del primer tipo de error los
intentos de obtener un recurso del sistema, como localizar y encontrar un
archivo para entrada. Estos tipos de errores son el resultado de recursos
extremos sobre los cuales el programador no tiene control. El segundo tipo de
error puede ocurrir cuando un programa le indica al usuario que introduzca un número
entero, y el usuario introduce una cadena, como e234, que no puede ser
convertida en un valor numérico.

Creación
de excepciones definidas por el usuario
Las
excepciones predefinidas cubren las situaciones de error más habituales con las
que nos podemos encontrar, relacionadas con el propio lenguaje y el hardware.
Cuando se desarrollan aplicaciones existen otras situaciones de error de más
alto nivel relacionadas con la funcionalidad de nuestros programas. El
manejador de excepción, catch, específica entre paréntesis el tipo de objetos
que tienen acceso al mismo y opcionalmente nombra un argumento, por ejemplo
cuando necesitamos acceder a una función miembro de la clase de excepción Cel,
tendremos que especificar el nombre de un objeto de excepción:
Catch
(Cel el) // el es inicializador con el objeto temporal
{ // creador por throw Cel()
//tipo
de excepción Cel atrapada
Cout<<el.MostrarCausa()<<endl;
Las
excepciones en C ++ pueden ser excepciones no verificadas, una función puede
lanzar cualquier tipo de excepción y excepciones verificadas, una función solo
puede lanzar las excepciones que ha declarado.
a) Lanzar una
excepción
La sentencia throw Cel() lanza la excepción
Cel , esto es , crea un objeto de esta clase, que interrumpe el flujo de
ejecución de la aplicación y vuelve por la pila de llamadas de funciones hasta
encontrar una que sepa atrapar la excepción( las excepciones se atrapan gracias
a las sentencias catch).
Si
una función lanza una excepcion y en la
vuelta por el camino de llamadas funciones no se encuentra una que la
atrape la aplicación finalizara. En
cambio, si se encuentra un manejador para esa excepción , se ejecuta. En el
supuesto de que en la pila de llamadas a
funciones quedaran otras que pudieran atraparla, no serán tenidas en cuenta;
esto es, solo se tiene en cuenta el manejador de la función por el que haya
pasado el flujo de control más reciente.
Ejemplo
de excepciones.
#include<iostream>
using namespace std;
int main(){
int *x;
int y = 100000000;
try {
x = new int[y];
x[0] = 10;
cout << "Puntero: "
<< (void *) x << endl;
delete[] x;
}
catch(std::bad_alloc&) {
cout << "Memoria
insuficiente" << endl;
}
return 0;
}
Conclusión:
Las
excepciones son representadas como objetos derivados de la clase abstracta
Cexcepcion.
Catch
en cada programa toma como primer parámetro el tipo de excepción a verificar ,
y como segundo parámetro, el nombre para un puntero a un objeto de ese tipo de
excepción , que puede ser utilizado dentro del bloque catch para acceder a ese
objeto. Esta variable es declarada por el usuario.
Throw
envía la excepción especificada. Throw interrumpe la ejecución del programa y
pasa el control al bloque catch asociado.
Además
las excepciones proporcionan una manera limpia de verificar errores
Descarga Libros en c y c++ https://mega.nz/folder/ZckjDaLR#v5Bgwuv3ypM8uxOoKw90Wg
Bibliografía:
Libro:
Programación orientada a objetos
Autor:
Francisco Javier Ceballos
Edit.
ADDISON WESTLEY IBEROAMERICANA
Libro:
C++ para ingeniería y Ciencias
Autor: Gary. J. Bronson
Edit. THOMSON
Comentarios
Publicar un comentario
Hola que tal,dime tu opinión