• 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
Comentarios de: Curso de programación de C/C++ - Excepciones (0)
No hay comentarios