Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Crear un vector de distintas clases

Estas en el tema de Crear un vector de distintas clases en el foro de C/C++ en Foros del Web. Hola, tengo un problema que no se por donde coger, ya que tengo que hacer un vector, o algún tipo de almacen, en el que ...
  #1 (permalink)  
Antiguo 18/01/2009, 19:19
 
Fecha de Ingreso: enero-2009
Mensajes: 2
Antigüedad: 15 años, 3 meses
Puntos: 0
Crear un vector de distintas clases

Hola, tengo un problema que no se por donde coger, ya que tengo que hacer un vector, o algún tipo de almacen, en el que meter clases de diferentes tipos.
El problema es que tengo una clase abstracta de la que hereda otra clase que si define sus metodos. A mi me gustaria definir un vector del tipo de la clase abstracta por que hay varias clases que la implementan, es decir, que tengo:

class Animal{
public:
Animal();
~Animal();
virtual int Comer();
}

class Perro : public Animal{
public:
Perro();
~Perro();
int comer();
}

class Gato: public Animal{
public:
Gato();
~Gato();
int comer();
}

class Mascotas{
public:
almacen_de_clases_distintas;
int n_animales;
añadir_mascota(Animal a);
}

me gustaría saber que tipo debería tener "almacen_de_clases_distintas", ya que no me deja poner "vector<Animal> anim;", que es lo que me gustaría para poder tener a todas las mascotas en una sola estructura.
Gracias
  #2 (permalink)  
Antiguo 18/01/2009, 20:20
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Respuesta: Crear un vector de distintas clases

Bien esto lo podés hacer manejando apuntadores y creando objetos array del tipo abstracto.

Por ejemplo:
Código:
Animal **animales = new Animal*[cantidad_animales];
El código anterior, te crea un vector de apuntadores a objetos de tipo animal, pero no los objetos propiamente dichos.

Para llenar el vector, deberías asignar cada elemento manualmente. Por ejemplo:
Código:
animales[0] = new Gato();
animales[1] = new Perro();
Esto te permite ejecutar el siguiente código
Código:
for(int i=0;i<cant_animales;i++) {
      animales[i].comer();
}
Espero que te sea de ayuda.
  #3 (permalink)  
Antiguo 18/01/2009, 21:17
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Crear un vector de distintas clases

Hola,

Cita:
Iniciado por abudemio Ver Mensaje
... ya que no me deja poner "vector<Animal> anim;", que es lo que me gustaría para poder tener a todas las mascotas en una sola estructura. ...
¿Ni así?

#include <vector>
std::vector <Animal> anim;

Saludos,
  #4 (permalink)  
Antiguo 19/01/2009, 05:59
poi
 
Fecha de Ingreso: octubre-2008
Mensajes: 73
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Crear un vector de distintas clases

std::vector<Animal * > anim;
  #5 (permalink)  
Antiguo 20/01/2009, 09:30
 
Fecha de Ingreso: enero-2009
Mensajes: 2
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Crear un vector de distintas clases

Muchas gracias, al final lo solucioné como comentó TolaWare, y no parece dar problemas, de todas formas, supongo que como dice poi también se podría hacer.

Gracias por las respuestas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:57.