La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

MANEJO DE EXCEPCIONES EN C++

Presentaciones similares


Presentación del tema: "MANEJO DE EXCEPCIONES EN C++"— Transcripción de la presentación:

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


Descargar ppt "MANEJO DE EXCEPCIONES EN C++"

Presentaciones similares


Anuncios Google