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

Array accesible en todas las clases

Estas en el tema de Array accesible en todas las clases en el foro de C/C++ en Foros del Web. Buen día. Soy novato en C++ y estoy haciendo un pequeño juego con la librería de Allegro, pero en sí mi pregunta es más general. ...
  #1 (permalink)  
Antiguo 18/10/2013, 10:55
Avatar de hey_alan  
Fecha de Ingreso: diciembre-2006
Ubicación: México
Mensajes: 348
Antigüedad: 17 años, 2 meses
Puntos: 8
Pregunta Array accesible en todas las clases

Buen día.

Soy novato en C++ y estoy haciendo un pequeño juego con la librería de Allegro, pero en sí mi pregunta es más general.

En la clase principal en la función main(), tengo un array de objetos de una clase base y a partir de ahí varias instancias derivadas de ésta (polimorfismo):

Código:
CBody **objs = new CBody*[n];
objs[0] = new CBall(320,240);
objs[1] = new CCanasta(500,120);
...
El problema es que, por ejemplo, quisiera en determinado punto verificar la colisión entre los objetos (digamos la pelota con la canasta), desde una función del objeto de la pelota.

Para esto supongo que dicho array debería ser global o accesible para todas las clases, entonces debo hacer la declaración desde el ".h" de la clase principal, afuera de la declaración de la clase, ¿no?

Sin embargo, al incluir ese .h en las demás clases me da miles de errores, supongo porque es la clase principal :P

¿Alguien tiene alguna idea?

PD: Da lo mismo hacer el array estático, al incluir el ".h" en las demás clases. Y sí, tengo el #pragma once

Muchísimas gracias, ¡Saludos!
__________________
Alan Marth Media

Diseño web y Publicidad en Morelia, Michoacán
  #2 (permalink)  
Antiguo 18/10/2013, 12:35
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 7 meses
Puntos: 83
Respuesta: Array accesible en todas las clases

Con polimorfismo no se, pero puedes probar lo que funciona sin polimorfismo y que sirve para incluir clases en otras: incluyes las cabeceras de las clases derivadas en la cabecera de la base, luego declaras clases nulas derivadas en la cabecera de la base, luego vas a cada derivada e incluyes la cabecera de la base, declaras una base nula en cada derivada y de alguna forma (en el constructor, en una funcion set_loquesea) desde la base envias un puntero this a las derivadas; de esa forma las derivadas pueden accecer a la base. Creo que lo veras mejor con un ejemplo que con esta mie.. de explicacion que acabo de poner :)


Código C++:
Ver original
  1. //cjuego.h
  2. #include "cball.h"
  3. class CBall;//declaro una clase nula de la clase implementada en cball.h
  4.  
  5. class CJuego {
  6. public:
  7.     CJuego();
  8.     ~CJuego();
  9.  
  10. private:
  11.     CBall *c_ball;
  12. };


Código C++:
Ver original
  1. //cjuego.cpp
  2. #include "juego.h"
  3. CJuego::CJuego() {
  4.     c_ball = new CBall(this);
  5. }


Código C++:
Ver original
  1. //cball.h
  2. #include "cjuego.h"
  3. class CJuego;//declaro una clase nula de la clase implementada en CJuego
  4.  
  5. class CBall {
  6. public:
  7.     CBall(CJuego *);
  8. private:
  9.     CJuego *c_juego;
  10. };


Código C++:
Ver original
  1. //cball.cpp
  2. #include "cball.h"
  3. CBall::CBall(CJuego *ptr_cjuego) {
  4.     c_juego = ptr_cjuego;
  5. }

Puedes ponerlo en todas las clases que quieras acceder a la base; de esta forma desde el puntero c_juego puedes acceder a los metodos publicos de la clase CJuego desde las clases derivadas.

Saludos
vosk
  #3 (permalink)  
Antiguo 18/10/2013, 19:56
Avatar de hey_alan  
Fecha de Ingreso: diciembre-2006
Ubicación: México
Mensajes: 348
Antigüedad: 17 años, 2 meses
Puntos: 8
Respuesta: Array accesible en todas las clases

Vaya, en realidad te agradezco tu explicación vosk, me ha quedado muy claro. Sólo quería hacerte una consulta, digamos que todas las clases que hereden de CBody van a tener la necesidad de acceder a ese arreglo, entonces me preguntaba qué tan conveniente sería hacer ese puntero al CJuego como un puntero estático de CBody? Digo, en lugar de pasarlo como argumento uno por uno :P

Muchísimas gracias, nuevamente, te lo agradezco.
__________________
Alan Marth Media

Diseño web y Publicidad en Morelia, Michoacán
  #4 (permalink)  
Antiguo 19/10/2013, 09:50
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 7 meses
Puntos: 83
Respuesta: Array accesible en todas las clases

Mmm no se (jeje es que no entiendo la pregunta, perdona)

Tienes una lista de punteros a clase guardada en CBody que es global, pero para que compile tiene que ser visible desde todos los demas archivos que la incluyen, hasta aquí coincidimos; la idea que planteas es: dejar un puntero externo (global) visible desde las demas clases, ok me parece que es correcto, prueba a implementar y a ver que te dice el compilador.

Saludos
vosk

Etiquetas: clases, todas
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:28.