Duda :(

01/09/2004 - 02:12 por Lorena | Informe spam
Hola. Tengo una duda sobre una cuestión de C++, a ver si
me podeis alyudar.
void main(void){
try{throw &Real(new Entero(1),new Entero(1));
}catch(Real &e){cout<<"Primera";}
catch(Numero &e){cout<<"Segunda";}
catch(float f){cout<<"Tercera";}
catch(Elemento *e){cout<<"Cuarta";}
catch(...){cout<<"Quinto";}
}

El programa escribe: "Cuarta". Pero no entiendo porque no
entra por el primer catch y escribe "Primera".
Por cierto la clase Real hereda de Elemento.
A ver si me podeis ayudar.
Muchas gracias.

Preguntas similare

Leer las respuestas

#1 Angel J. Hernández
01/09/2004 - 03:42 | Informe spam
Saludos,

Como puedo ver estás lanzando una referencia de un objeto Real (este deriva
de Elemento). Tu pregunta es por qué no entra por el primero, pues es
sencillo, si pasas una dirección que se espera recibir... un puntero. En un
bloque try/catch se toma (selecciona) la atrapada (catch) que concuerde con
el objeto arrojado (excepción). De todos los que tienes, el único que es un
apuntador del tipo Elemento (Elemento *) es e (cuarta opción). Por eso se
selecciona el cuarto y no el primero, de hecho haz la prueba cámbialos de
lugar (el cuarto por el primero) para que veas que entraría por el primero.

Espero te pueda servir


Angel J. Hernández M.
MCSD



"Lorena" escribió en el mensaje
news:3ca801c48fb8$5547cda0$
Hola. Tengo una duda sobre una cuestión de C++, a ver si
me podeis alyudar.
void main(void){
try{throw &Real(new Entero(1),new Entero(1));
}catch(Real &e){cout<<"Primera";}
catch(Numero &e){cout<<"Segunda";}
catch(float f){cout<<"Tercera";}
catch(Elemento *e){cout<<"Cuarta";}
catch(...){cout<<"Quinto";}
}

El programa escribe: "Cuarta". Pero no entiendo porque no
entra por el primer catch y escribe "Primera".
Por cierto la clase Real hereda de Elemento.
A ver si me podeis ayudar.
Muchas gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida