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

C++ duda sobre clases, subclases, herencia y vectores

Estas en el tema de C++ duda sobre clases, subclases, herencia y vectores en el foro de C/C++ en Foros del Web. Buenas, os comento a ver si alguien sabe ayudarme. Estoy haciendo un juegucho en C++ para pillar un poco de solutura con él (porque estoy ...
  #1 (permalink)  
Antiguo 12/10/2013, 10:24
 
Fecha de Ingreso: octubre-2013
Mensajes: 3
Antigüedad: 10 años, 6 meses
Puntos: 0
C++ duda sobre clases, subclases, herencia y vectores

Buenas, os comento a ver si alguien sabe ayudarme.

Estoy haciendo un juegucho en C++ para pillar un poco de solutura con él (porque estoy acostumbrado a Python y en comparación no veas lo quisquilloso que es C xD) y me he encontrado con un problema.

He creado una clase "personaje", un puñado de subclases de esa clase para distintos tipos de personajes (mago, ladron, etc...), y otra clase "equipo" donde entre otras cosas guardo un vector de tipo "personaje" que reperesentan un equipo. Tal que así:

class personaje{
protected:
blablabla;
public:
atacar();
}

class mago : public personaje{
protected:
blablablu;
public:
atacar(){codigo correspondiente a la clase};
}

class equipo{
public:
vector<personaje> lista_personajes;
metodos varios();
}


La cuestión es que me gustaría hacer un simple bucle en el que recorrer el vector de peronajes y acceder a un metodo común a todos (atacar()) pero que es diferente para cada uno.

El problema es que como es un vector de "personaje" porque puede entrar cualquier subclase, aunque lo llene directamente con subclases (ej: [mago, ladron, tanque] ) cuando hago v[i].atacar(), me busca el metodo en la clase "personaje", no en las subclases.

Hay alguna manera de hacer que al llamar al metodo de la clase lo busque en la subclase antes?

Gracias.
  #2 (permalink)  
Antiguo 12/10/2013, 11:27
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Respuesta: C++ duda sobre clases, subclases, herencia y vectores

Si las hay.
Usando metodos virtuales.
Si en la clase base declaras atacar como metodo virtual entonces cuando tengas una referencia o un puntero del tipo de la clase base y le asignas un objeto de la clase heredada, se llamara la funcion virutal herdada.

Es mas facil implementarlo que platicarlo jaja.
Investifa un poco sobre clases abstractas en C++ y metodos virtuales, es justo lo qeu buscas.

Saludos
  #3 (permalink)  
Antiguo 12/10/2013, 12:38
 
Fecha de Ingreso: octubre-2013
Mensajes: 3
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: C++ duda sobre clases, subclases, herencia y vectores

Gracias por la respuesta.

Lo he probado y nada, sigue intentando acceder a la de la clase general, si hay algo lo hace, y si no hay nada no consigue acceder al metodo de la subclase.

Pero bueno, ahora al menos se por donde buscar. Seguiré buscando a ver si consigo arreglarlo y si no pondré un swtich-case guarro en la clase general.
  #4 (permalink)  
Antiguo 12/10/2013, 15:11
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Respuesta: C++ duda sobre clases, subclases, herencia y vectores

No se como lo estes haciendo.
Pero para empezar tu vector debe contener referencias no instancias a objetos.
Sino no va a funcionar.

Saludos.
  #5 (permalink)  
Antiguo 13/10/2013, 04:46
 
Fecha de Ingreso: octubre-2013
Mensajes: 3
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: C++ duda sobre clases, subclases, herencia y vectores

De momento estoy trabajando con equipos predefinidos, así que tengo cosas como

#define black_mage (Black_Mage())


para cada tipo, y luego con eso defino un equipo cualquiera.

#define Team1 {knight,thief,black_mage,white_mage}


desde el main llamo al constructor con Team T("nombre",Team1);

y el constructor es

Team::Team(const char* n, vector<Character> C){
...
...
this->lista = C;
}
  #6 (permalink)  
Antiguo 13/10/2013, 08:53
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Respuesta: C++ duda sobre clases, subclases, herencia y vectores

Mmm. No esa no es una manera correcta de hacerlo en C++. Mira ahorita no tengo tiempo para explicarte. Mas tarde te ayudo. Mientras te recomiendo que leas sobre polimorfismo en C++.

Saludos
  #7 (permalink)  
Antiguo 13/10/2013, 10:55
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Respuesta: C++ duda sobre clases, subclases, herencia y vectores

Mmm. No esa no es una manera correcta de hacerlo en C++. Mira ahorita no tengo tiempo para explicarte. Mas tarde te ayudo. Mientras te recomiendo que leas sobre polimorfismo en C++.

Saludos

Etiquetas: clases, herencia, vectores
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 16:30.