Descargar la presentación
La descarga está en progreso. Por favor, espere
1
MANEJO DE EXCEPCIONES EN C++
2
C++ Se intenta ejecutar un bloque de código
Se produce la circunstancia excepcional Se desvía la ejecución del programa a un sitio especifico
3
try { // bloque de código que se intenta
... if (condición) throw ¨……..¨ ; } catch (...) { // bloque manejador de posibles excepciones ... // continua la ejecución normal
4
Ejemplo: # include <stdio.h> bool pass; class Out{ };
void festival (bool); int main( ) { try { pass = true; festival (true); } catch(Out o) { pass = false; } return pass ? (puts("Acierto!"),0) : (puts("Fallo!"),1); } void festival (bool firsttime){ if (firsttime) throw Out( ); Salida: Fallo!
5
Secuencia normal del bloque-intento (Try-block)
A: Se produce una circunstancia excepcional: Se lanza la excepción señalada por la sentencia throw El programa busca por un manejador ("handler") adecuado a la excepción Se encuentra el ¨handler¨ : La pila (stack) es recorrida hacia abajo hasta el punto donde está el manejador. El control del programa es transferido al manejador.
6
Secuencia normal del bloque-intento (Try-block)
No se encuentra ningún manejador: Se invoca la función terminate(): Se ha establecido una función t_func por defecto con set_terminate(). terminate invoca t_func (que debe terminar el programa). No se ha establecido ninguna función por defecto con set_terminate() terminate invoca la función abort(). B: No se produce ninguna excepcion: El programa sigue su ejecución normal (saltándose los bloques catch que pudieran seguir).
7
#include <except. h> #include <process
#include <except.h> #include <process.h> #include <stdio.h> bool pass; class Out{}; void final(); void festival(bool); void test(); int main() { set_terminate(final); test(); return pass ? (puts("Salir del test"),0) : (puts("Seguir el test"),1); } void final(){ puts("*** Nadie captura la excepción ***"); abort(); } void festival (bool firsttime) { if (firsttime) throw Out(); } void test () { festival(true); }
8
Manejador de excepciones (“handler”)
try { // bloque-intento ... // posibles errores } catch (TipoX x) { // capturar errores X ... catch (TipoY y) { // capturar errores Y ... ... // sigue aquí
9
El manejador universal:
catch (...) { <sentencias> }
10
#include <stdio.h> bool pass; class Out{};
void festival(bool firsttime) { if(firsttime) throw Out(); } void test() try { festival(true); } catch(...){ pass = true; } // puede capturar cualquier excepción } int main() { // ================== pass = false; test(); return pass ? (puts("Excepción capturada"),0) : (puts("no hay excepción") ,1); }
11
Aunque es factible lanzar cualquier tipo de excepción, la librería estandar de C++ ofrece unas clases para este propósito: Exception Logic error Bad exception Runtime error Out of range Bad alloc Range error Domain error Bad cast Overflow error Length error Bad typeid Underflow error Invalid argument
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.