La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

MANEJO DE EXCEPCIONES EN C++. C++ Se intenta ejecutar un bloque de código Se intenta ejecutar un bloque de código Se produce la circunstancia excepcional.

Presentaciones similares


Presentación del tema: "MANEJO DE EXCEPCIONES EN C++. C++ Se intenta ejecutar un bloque de código Se intenta ejecutar un bloque de código Se produce la circunstancia excepcional."— Transcripción de la presentación:

1 MANEJO DE EXCEPCIONES EN C++

2 C++ Se intenta ejecutar un bloque de código Se intenta ejecutar un bloque de código Se produce la circunstancia excepcional Se produce la circunstancia excepcional Se desvía la ejecución del programa a un sitio especifico 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 # include bool pass; class Out{ }; class Out{ }; void festival (bool); void festival (bool); int main( ) { int main( ) { try { try { pass = true; pass = true; festival (true); festival (true); } catch(Out o) { catch(Out o) { pass = false; pass = false; } return pass ? (puts("Acierto!"),0) : (puts("Fallo!"),1); } return pass ? (puts("Acierto!"),0) : (puts("Fallo!"),1); } void festival (bool firsttime){ void festival (bool firsttime){ if (firsttime) throw Out( ); 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¨ : 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: No se encuentra ningún manejador: Se invoca la función terminate(): oSe ha establecido una función t_func por defecto con set_terminate(). terminate invoca t_func (que debe terminar el programa). oNo 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 #include #include bool pass; class Out{}; void final(); void festival(bool); void test(); #include #include #include 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 ***"); puts("*** Nadie captura la excepción ***"); abort(); abort();} void festival (bool firsttime) { if (firsttime) throw Out(); } void test () { festival(true); }

8 Manejador de excepciones (handler) try { // bloque-intento... // posibles errores... // posibles errores} catch (TipoX x) { // capturar errores X......} catch (TipoY y) { // capturar errores Y......}... // sigue aquí

9 El manejador universal: catch (...) { } catch (...) { }

10 #include 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 Bad exception Bad alloc Bad cast Bad typeid Logic error Out of range Domain error Length error Runtime error Range error Overflow error Underflow error Invalid argument


Descargar ppt "MANEJO DE EXCEPCIONES EN C++. C++ Se intenta ejecutar un bloque de código Se intenta ejecutar un bloque de código Se produce la circunstancia excepcional."

Presentaciones similares


Anuncios Google