C/Visual C - Classes

 
Vista:

Classes

Publicado por void_Pointer (180 intervenciones) el 24/08/2003 17:43:31
Hola Todos, queria saver si alguien me puede responder esto, supongamos que tengo una clase A y luego hago una clase B
que es derivada de de A osea
class B:public A
{....};
ahora quiero saver si es lo mismo un puntero a A que un Puntero a B
osea por que B no deja de A , o si? yo para pasar opbjectos funciones que sirba para que por jeemplo

void Nuevo(A *x); y sea igual hacer
B *i;
A *d;
Nuevo(i);
Nuevo(d);
se puede hacer esto?????

saludos

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:Classes

Publicado por chuidiang (677 intervenciones) el 25/08/2003 12:14:38
Siempre es posible asignar un hijo a un puntero del padre. En tu caso, a un puntero a A siempre podras asignarle una instancia de B. Idem para parámetros, si la función admite un puntero a la clase padre, siempre podrás pasar una clase hija.

B *i = new B();
A *d = new B(); <-- Puedes asignar new B() a un puntero a A

puedes hacer

Nuevo (i); <--- Puedes pasar un puntero a B donde se necesita uno a A
Nuevo (d);

sin problemas.

Al revés no es cierto, el compilador se quejará. Donde admitas una clase hija o puntero a clase hija, no puedes poner alegremente un puntero a clase padre. Si tu funcion fuese

void Nuevo (B *x)

no puedes

A *d = new B(); <--- Esto esta bien, igual que antes
Nuevo (d); <--- Da error al compilar

Sin embargo, esta situacion puedes "forzarla" haciendo un "cast"

Nuevo ( (B *)d);

Este cast puede ser "peligroso". Antes de hacerlo debes estar muy seguro que d en realidad apunta a una instancia de B.

Por ejemplo, si B y C son clases hijas de A, el siguiente codigo no da errores de compilado

A *d = new C();
Nuevo ( (B *)d); <--- Mal. d apunta a una instancia de C, no de B

pero al ejecutarlo te dará resultados raros.

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