[C con Clase] Duda en consulta c++ con clase

Steven Davidson srd4121 en njit.edu
Vie Abr 9 19:45:22 CEST 2010


Hola Carlos,

Carlos Arias wrote:
> Buenos días,
> Muchas gracias por la respuesta en la lista de correo de c++ con
> clase, me aclaraste bastantes dudas.
> Pero sigo con una mi deseo es poder crear una matriz de Padres algo
> asi:
> 
> [Padre*][Padre*][Padre*][Padre*][Padre*][Padre*]
> [Padre*][Padre*][Padre*][Padre*][Padre*][Padre*]
> [Padre*][Padre*][Padre*][Padre*][Padre*][Padre*]
> [Padre*][Padre*][Padre*][Padre*][Padre*][Padre*]
> [Padre*][Padre*][Padre*][Padre*][Padre*][Padre*]
> 
> Aun no me queda claro como podria realizarlo como lo mostre en el
> correo de la lista si lo logro hacer para int pero no para Padre creo
> que se debe a que es abstracta.

La verdad es que contesté a esta inquietud. Básicamente, necesitas una 
matriz de 'Padre *'. Al crear una matriz dinámicamente, necesitarás un 
doble puntero al tipo del elemento que quieres. En tu caso, necesitas un 
doble puntero a 'Padre *' que es lo mismo que un triple puntero.

Ahora bien, creamos solamente la matriz dinámica. Esto es,

Padre ***tabla = new Padre**[filas];

for( int f=0; f<filas; f++ )
   tabla[f] = new Padre*[cols];

Ahora tenemos una tabla o matriz de 'Padre *'. Necesitamos manipular 
objetos de la jerarquía 'Padre' a través de punteros porque es 
abstracta, lo cual implica que no podemos instanciar objetos de tal clase.

Posteriormente, podemos usar los elementos de la tabla para apuntar a 
objetos instanciados de clases instanciables en la jerarquía de 'Padre'. 
Por ejemplo,

Hijo1 obj1;
Hijo2 obj2;
Hijastro1 obj3;

tabla[0][0] = &obj1;
tabla[1][0] = &obj2;
tabla[3][5] = &obj3;
tabla[0][1] = new Hijastro2;
tabla[1][1] = new Hijo3;
...

Como puedes ver, o bien apuntamos a un objeto instanciado en el programa 
o bien instanciamos los objetos dinámicamente y guardamos su dirección 
de memoria en el elemento concreto.


Espero que esto te ayude.

Steven





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