Está en la página 1de 13

Programación Avanzada

C++ excepciones
Introducción

 Las excepciones proveen una forma


de manejar los eventos que no
corresponden con el flujo normal del
programa, como lo dice su palabra,
situaciones excepcionales.

Programación Avanzada | Desarrollo Orientado a Objetos basado en UML


Ejemplos

Algunos ejemplos:
 Dividir un número por cero.
 Acceder a un elemento de un arreglo no
definido.
 Ingresar una persona con edad negativa.
 Obtener usuario con nick “X” en un
sistema que no cuenta con ese usuario.

Programación Avanzada | Desarrollo Orientado a Objetos basado en UML


Introducción

 Estas situaciones si no se controlan


provocan la salida inesperada del
programa en ejecución. Nuestro
objetivo es mostrar como capturarlas.

Programación Avanzada | Desarrollo Orientado a Objetos basado en UML


Excepciones

Para utilizarlas debemos manejar las


siguientes palabras reservadas:
 try
 catch
 throw

Programación Avanzada | Desarrollo Orientado a Objetos basado en UML


try

 Define bloque de instrucciones donde


se está a la “escucha” de que suceda
una excepción. En caso de no haber
excepciones se ejecutan todas las
líneas de código del bloque y se
continúa luego del catch (no se
ejecuta el código del catch)

Programación Avanzada | Desarrollo Orientado a Objetos basado en UML


throw

La palabra reservada throw se utiliza


para lanzar excepciones que son
capturadas dentro del bloque try.

Programación Avanzada | Desarrollo Orientado a Objetos basado en UML


Catch

 En caso que alguna de las


instrucciones de try lance una
excepción (explícitamente con la
palabra reservada throw o mediante la
invocación de una función,
procedimiento o método que tire la
excepción) se ejecuta el código dentro
del bloque catch.

Programación Avanzada | Desarrollo Orientado a Objetos basado en UML


Excepciones

try
{
//intento ejecutar el codigo en este bloque
}
catch (std::exception& e)
{
//si hubo algun error en la ejecucion de las instrucciones
//del bloque try entonces es capturada
}

Programación Avanzada | Desarrollo Orientado a Objetos basado en UML


Excepciones - ejemplo
#include <exception>
int main () {
try
{
int b = 0;
int a = 3 / b; //esta linea tira un excepcion del sistema
a++; //esta linea y todas las siguientes dentro del bloque
//try no se ejecutan
std::cout << a << std::endl;
}
catch (std::exception& e)
{
std::cerr << "exception caught: " << e.what() << '\n';
}
return 0;
}

Programación Avanzada | Desarrollo Orientado a Objetos basado en UML


Excepciones – mismo ejemplo
sin excepciones
int main () {

int b = 0;
if(b==0)
{
std::cerr << "Error!” << '\n';
}
else
{
int a = 3 / b;
A++;
std::cout << a << std::endl;
}
return 0;
}

Programación Avanzada | Desarrollo Orientado a Objetos basado en UML


Excepciones programadas

 También se puede extender la clase


exception y agregarle métodos,
atributos. En particular es interesante
redefinir el método what() que
devuelve mensaje de error de la
excepcion.

Programación Avanzada | Desarrollo Orientado a Objetos basado en UML


Excepciones programadas
class miexcepcion: public exception
{
public:
const char* what() const throw()
{
return "Error: mensaje personalisado...";
}
};

int main () {
try {
throw miexcepcion();
} catch (exception& e) {
cout << e.what() << '\n';
}
return 0;
}

Programación Avanzada | Desarrollo Orientado a Objetos basado en UML

También podría gustarte