[C con Clase] Matriz de punteros de una clase abstracta
Jordenys Pérez Feria
jferia en uci.cu
Vie Abr 9 16:13:20 CEST 2010
Hola Carlos, en el código que envías existen pequeños problemas, te los comento a continuación.
Asumiendo que lo que quieres construir una matriz de objetos de n x n elementos.
Padre **tabla= new Padre*[7]; //Esto es correcto.
int m = 7;
for(int i = 0; i < 7; i++) {
tabla[i] = new Padre*[m]; //Esto no.
}
//El problema esta dado en que tabla es un puntero a puntero, lo que creaste al principio es algo así:
tabla = [Padre*][Padre*][Padre*][Padre*][Padre*][Padre*][Padre*]
cuando tratas de asignar memoria para cada posición de tabla[i] y haces esto:
new Padre*[m];
estas intentando volver a crear una lista de puntero a punteros, la forma correcta:
new Padre();
pero igual existe un problema, que como mencionaste anteriormente la clase Padre es abstracta y no se puede asignar memoria para un tipo de dato abstracto. Te propongo la siguiente solución:
#include <iostream>
using namespace std;
class Padre {
public:
virtual void setName(const std::string &name) = 0;
private:
};
class Hijo : public Padre{
virtual void setName(const std::string &name) {}
};
int main() {
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
int m = 7;
Padre **tabla = new Padre*[m];
for(int i = 0; i < m; i++){
tabla[i] = new Hijo();//Se crea memoria dinámica para un hijo no abstracto.
}
return 0;
}
Espero haber aclarado algunos conceptos.
Saludos.
----- Mensaje original -----
De: "Carlos Arias" <carlos.candres69cr en gmail.com>
Para: cconclase en listas.conclase.net
Enviados: Viernes, 9 de Abril 2010 1:55:35 (GMT-0500) Auto-Detected
Asunto: [C con Clase] Matriz de punteros de una clase abstracta
Buenas mi consulta es:
Estoy intentando realizar un arreglo dinamico de punteros de una clase padre que es abstracta lo cual lo logro con,
Padre **tabla = new Padre*[7];
Pero mi deseo y problema en este momento es que necesito crear una matriz dinamica de esta misma clase padre,
intente lo siguiente:
Padre **tabla= new Padre*[7];
int m = 7;
for(int i = 0; i < 7; i++) {
tabla[i] = new Padre*[m];
}
Con lo cual me genera Error c2440: '=' : no se puede realizar la conversión de 'Padre**' a 'Padre*'
Les agradezco la ayuda que puedan brindar.
--
Carlos Andrés Arias Blanco
_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
Más información sobre la lista de distribución Cconclase