elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C++] Qué son las excepciones.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C++] Qué son las excepciones.  (Leído 1,501 veces)
huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
[C++] Qué son las excepciones.
« en: 24 Noviembre 2018, 23:09 pm »

Pues he visto que C++ tiene excepciones (try, catch, throw)
Me sorprende, ya que es un lenguaje compilado y algo antiguo, casi de la edad de C.
Hay una lista de excepciones predefinidas, y algún ejemplo de como usarlas?
Saludos


En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.176



Ver Perfil
Re: [C++] Qué son las excepciones.
« Respuesta #1 en: 25 Noviembre 2018, 02:11 am »

Saludos,

- Básicamente, las excepciones son en realidad errores durante la ejecución. Si uno de esos errores se produce y no implementamos el manejo de excepciones, el programa sencillamente terminará abruptamente. Es muy probable que si hay ficheros abiertos no se guarde el contenido de los buffers, ni se cierren, además ciertos objetos no serán destruidos, y se producirán fugas de memoria.

- En programas pequeños podemos prever las situaciones en que se pueden producir excepciones y evitarlos. Las excepciones más habituales son las de peticiones de memoria fallidas.

- Los tipos de la expresión del throw y el especificado en el catch deben coincidir, o bien, el tipo del catch debe ser una clase base de la expresión del throw. La concordancia de tipos es muy estricta, por ejemplo, no se considera como el mismo tipo int que unsigned int.

- Si no se encontrase ningún catch adecuado, se abandona el programa, del mismo modo que si se produce una excepción y no hemos hecho ningún tipo de manipulación de excepciones. Los objetos locales no se destruyen, etc.

- Para evitar eso existe un catch general, que captura cualquier throw para el que no exista un catch concreto:

Código
  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4.  try {
  5.    throw 'x'; // Intencionalmente provoca una excepción tipo char
  6.  }
  7.  catch(int c) { // No coincide el tipo
  8.    cout << "El valor de c es: " << c << endl;
  9.  }
  10.  catch(char c) { // Coincide y captura la excepción
  11.    cout << "El valor de c es: " << c << endl;
  12.  }
  13.  catch(...) { // Si todo lo anterior falla, se captura aquí
  14.    cout << "Excepción imprevista" << endl;
  15.  }
  16.  return 0;
  17. }

-- Referencias: https://openlibra.com/es/book/resolviendo-problemas-con-el-lenguaje-de-programacion-c


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con excepciones.
Java
|Miguel| 0 1,766 Último mensaje 5 Febrero 2012, 19:29 pm
por |Miguel|
Problema con las excepciones
Programación C/C++
amchacon 3 2,404 Último mensaje 28 Enero 2013, 14:50 pm
por amchacon
Problema con Excepciones en C#
.NET (C#, VB.NET, ASP)
ORTUS 2 3,213 Último mensaje 13 Junio 2013, 16:43 pm
por ORTUS
Duda con excepciones en .NET
.NET (C#, VB.NET, ASP)
SARGE553413 3 2,311 Último mensaje 17 Julio 2014, 00:24 am
por elezekiel
Excepciones
Java
user-marcos 4 2,228 Último mensaje 27 Octubre 2015, 20:22 pm
por 0roch1
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines