[C con Clase] Hola amigos de C++......duda con funci

Steven Davidson srd4121 en njit.edu
Sab Nov 19 17:20:55 CET 2011


Hola Miguel Ángel,

2011/11/19 Miguel Angel Torres Fernandez-piñar <miguelangeltorresfp en gmail.com>:
> Hola a todos............
>
> Mi duda de hoy : Apartado Polimorfismo :
>
> Cuando usamos la siguiente expresión : Persona *Pepito = new
> Estudiante("Jose");
>
> ¿ Estamos reservando memoria para un objeto de la clase Estudiante y
> asignándo su dirección a un puntero de la clase base Persona ????.....
>

Correcto.

> ¿ Y en este proceso llamamos al constructor de la clase Estudiante ???
>

Sí; al instanciar un objeto, siempre se invoca SU constructor del tipo
correspondiente, por eso hay que conocer su tipo de dato - su clase.

> Me surge una gran duda, si a Estudiante le hemos añadido otras propiedades o
> métodos, entonces, un puntero que apuntara a un objeto de la clase Persona
> sería diferente de uno que apuntara a la clase Estudiante, no ???.....
>

Tal y como has planteado la pregunta, la respuesta es "no". Un puntero
es un puntero. Da igual si es un puntero a un 'char', a un 'double', o
a otro puntero de 'Estudiante'. El valor de un puntero es una
dirección de memoria, que hoy por hoy, puede ser de 32 bits (4 bytes)
o de 64 bits (8 bytes).

Ahora bien, la diferencia obviamente está en cada objeto. Uno puede
contener más información que el otro, porque cada clase define otros
campos que añade con otros tipos de datos. Además, la otra diferencia
está en el uso de un objeto de esta clase 'Estudiante' y otro de otra
clase. Obviamente no podemos usar el puntero para acceder a objetos
para luego acceder a las mismas funciones miembro porque cada objeto
tiene diferentes miembros.

> Al hilo de esto me surge una segunda duda que es la siguiente :
>
> Tengo muy claro lo que es un puntero a int, un puntero a
> struct..........pero me cuesta trabajo pensar en un puntero a una zona de
> memoria donde se guarda un objeto de una clase..........porque las
> propiedades tienen su espacio, pero y los métodos ???........qué espacio
> ocupa un método o una función ????.........
>

En primer lugar, en C++, las estructuras son iguales que las clases.
Sólo existe UNA diferencia que es el trato implícito por defecto de
sus miembros: para 'struct', los miembros son públicos por defecto, y
para 'class', son privados; no hay más diferencias.

En cuanto a la pregunta, las funciones no pertenecen a la clase; es
decir, no están agrupadas. Realmente, son globales, si las quieres ver
así, pero sus nombres están "adornados" con un formato especial para
indicar cierta información referente a los parámetros y posiblemente a
la clase que pertenece. Por lo tanto, en cuanto a memoria concierne,
sólo interesa los datos miembro y en el caso de polimorfismo, se
agrega otro miembro "escondido" que es un puntero a la tabla virtual;
a veces se llama 'vtable' o 'vtbl', pero eso depende del compilador.

> Gracias..........y un saludo a todos...........( y muchísimas gracias por
> este espacio increible de aprendizaje ).........
>


Espero haber aclarado las dudas.

Steven




Más información sobre la lista de distribución Cconclase