[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