C/Visual C - Excepciones en C++

 
Vista:

Excepciones en C++

Publicado por BluSky (28 intervenciones) el 08/08/2003 14:22:28
Tengo muchas lagunas con las excepciones. He visto páginas que tratan del tema en cuestión y me dan una idea bastante clara y concisa de su utilidad pero.... se pierden con los ejemplos que son tremensdamente difíciles de interpretar. Por eso, me he puesto manos a la obra y me encuentro con este problema: Tengo dos numeros a y b que quiero dividir. Introduzco 0 para el valor de b y, evidentemente, se produce una división por cero. Intento atrapar la excepción con el código que acompaño pero el programa SIEMPRE aborta ante la operación. ¿Acaso no pueden capturarse este tipo de errores de ejecución?
void main()
{
int a, b;
float r;
printf ("Introduce n1:"); scanf ("%d", &a);
printf ("\nIntroduce n2:"); scanf ("%d", &b);
try
{
r=a/b;
if (b==0)
throw ("division por 0");
}
catch (char *Mensaje)
{
printf ("%s", Mensaje);
}
printf ("Resultado de division: %f", r);
}
Saludos
Sebas
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Excepciones en C++

Publicado por chuidiang (677 intervenciones) el 08/08/2003 22:49:41
Las excepciones las lanzas tu y son las que capturas. En el caso de tu ejemplo, primero haces la division y luego comparas si es cero para lanzar la excepcion. El resultado es que se "fastidia" en r=a/b; , no llega al "throw". Debes hacer la comparacion y lanzar la excepcion antes de la division.

if (b==0)
throw ("division por cero");
else
r = a/b;

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Excepciones en C++

Publicado por BluSky (28 intervenciones) el 09/08/2003 00:36:01
Lo entiendo perfectamente. O sea que es el programador quien tiene que adelantarse al error... Pensé que este tipo de errores de ejecución podrían capturarse con las excepciones y, en vez de abortar, derivar la ejecución a otro punto. Qué diferencia hay, pues, con un "if" mondo y lirondo:-))
Muchas gracias
Sebas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Excepciones en C++

Publicado por chuidiang (677 intervenciones) el 09/08/2003 06:42:00
La verdad es que yo no le he encontrado demasiada utilidad a eso de las excepciones.
La unica ventaja que le he visto es la siguiente:

Imagina que tienes varias funciones mas o menos simples que pueden provocar un error. Por ejemplo divide (a,b), logaritmo (a), raiz (a), etc. Imagina que las hemos implementado de forma que lanzan una excepcion en caso de error (division por cero, logaritmo o raiz de un negativo, etc).
Si luego tienes un trozo de código en el que llamas a varias de esas funciones, siempre es mas comodo meter todo ese codigo en un unico try, que andar comprobando una a una si hay error.

try
{
c = divide (a,b);
raiz (logaritmo (c));
}
catch (...)
{
printf ("Error en las cuentas\n");
}

La opcion sin excepciones seria

if (b==0)
error
else
c = divide (a,b);

if (c<0)
error
else
d = logaritmo(c);

if (d<0)
error
else
c = raiz(d);

Como ves, algo mas liado. Ademas, despues de un error habría que saltarse los siguientes pasos, con lo que realmente habría que anidar los if.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Excepciones en C++

Publicado por BluSky (28 intervenciones) el 09/08/2003 10:10:46
Clarísimo.
Muchísimas gracias por tus ayuda en esta cuestión y en la del vector de punteros de la aplicación "mini güindows". En ésta, en cuanto a lo del typedef para dimensionar el vector de punteros a objetos, ¡chapó!.
Saludos y gracias de nuevo
Sebas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar