[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