Publicado el 9 de Mayo del 2017
812 visualizaciones desde el 9 de Mayo del 2017
26,8 KB
2 paginas
Creado hace 13a (15/07/2011)
Excepciones
Introducción
• La idea es separar el funcionamiento normal
de un programa de la gestión de los errores.
• Si algo va mal:
– División por cero.
– No hay más memoria.
– No existe el fichero deseado.
• Se lanza una excepción que HAY que tratar.
Curso de programación de C/C++
50
Curso de programación de C/C++
51
Sintaxis
Ejemplo
• Se apoya en
– try {...}: Abarca el programa normal. Si todo va
bien será lo ÚNICO que ejecute.
– throw exception: Cuando algo va mal nos
permite lanzar una excepción para indicarlo.
– catch (class exception) {}: Nos permite tratar un
tipo de excepción. Habrá un catch por cada tipo
posible.
try {
// Codigo normal
...
if (algo mal) throw excep;
// Si fue mal esto no ejecutaria
...
}
catch (int i) {...} // Excep. enteras
catch (double d) { ...} // Excep. reales
catch (my_exception) {...}//”mis” excep.
catch (...) {...} // Las “demás”
Curso de programación de C/C++
52
Curso de programación de C/C++
53
Paso de Excepciones entre
funciones (I)
• Si una función no captura una excepción está
va a la función que la invocó, que saltará al
“catch” correspondiente
• Si ninguna la captura se produce una
Abnormal program termination
• Esto aconseja poner, tras los múltiples catch
que nos interesan, siempre uno “por defecto”
catch (...) { cout << “excepcion inexperada”; }
//Admite todas las excepciones
Paso de Excepciones entre
funciones (II)
• Para limitar las excepciones que una función
puede lanzar se puede indicar explicitamente
cuales son las “autorizadas”:
void fun1 (int i) throw (int, double) {...}
Void fun2 (int i) throw () {...}
• Una función, dentro del catch, puede lanzar
otra excepción (p.e. si no sabe tratar la 1ª)
• E incluso relanzar la misma: throw;
Curso de programación de C/C++
54
Curso de programación de C/C++
55
1
Definir excepciones
Definir excepciones
• Hay algunas predefinidas: bad_alloc
try { p = new int[1000]; }
catch (bad_alloc b) { cout <<“Memory Failure”;}
• Incluso podemos definir nuestras Excep.
class mi_excepcion{char *mensaje; ...};
try {mi_excepcion excep;
...
Trow excep;}
catch (mi_excepcion e)
{cout << e.mensaje; ...};
• Es mejor que extienda la clase
“exception”
{...};
class mi_excepcion: public exception
• Tiene constructores, destructores,
what, operador =
Curso de programación de C/C++
56
Curso de programación de C/C++
57
Aserciones (I)
Aserciones (II)
• Similar idea a las excepciones, pero detectan fallos
del programador.
• Toda función necesita que se cumplan unas
premisas a la entrada (precondiciones) y deja el
estado en un modo conocido (postcondiciones)
• Si no se cumplen algo ha ido mal
• Se pueden desactivar para no penalizar las
ejecuciones “normales”:
g++ -DNDEBUG …
• No están pensadas para ser tratadas (generan un
Assertion failed)
• No se tratan porque al ser errores de programación no
deberían darse y si se dan no está claro como recuperarse
assert(4 < 3);
• Genera:
Assertion failed: 4 < 3, file assert.cpp,line 8
Abort
Curso de programación de C/C++
58
Curso de programación de C/C++
59
2
Comentarios de: Curso de programación de C/C++ - Excepciones (0)
No hay comentarios