[ Foro de C++ ]

ejecutar métodos de una instancia en otras.

26-Feb-2023 16:42
Invitado (Maurus)
1 Respuestas

Hola compañeros, buenos días, tardes o noches.

estoy intentando construir un pequeño juego, y estoy en una disyuntiva.

yo tengo la clase mapa, que yo quiero que una misma instancia, se comparta entre todos los personajes, fundamentalmente para consultar si la coordenada donde quieren ir está disponible o no.

yo pensé en hacerlo así, con punteros, pero no sé si es la mejor forma.
les dejo el código que creé que al menos me funcionó, pero quizás hay alguna forma más recomendable de hacer lo mismo.

#include <iostream>
#include <stdlib.h>
using namespace std;

class Mapa
{
private:
int x, y;

public:
Mapa ();
int getX ();
int getY ();
};

Mapa::Mapa ()
{
x = 10;
y = 19;
}

int Mapa::getX ()
{
return x;
}

int Mapa::getY ()
{
return y;
}

class Persona
{
private:
Mapa * map;
int x, y;

public:
Persona (Mapa *);
void consultar();
};

Persona::Persona (Mapa*m)
{
map = m;
x = 9;
y = 18;
}

void Persona::consultar ()
{
cout << "el valor de x es: " << map->getX() << endl;
}

int main ()
{
Mapa map;
Mapa *mp = &map;

Persona p1 (mp);
p1.consultar ();

system ("pause");
return 0;
}

Muchas gracias por leer,

un saludo.


14-Mar-2023 22:06
Invitado (Alejandro Andrade)

Hola, en tu código estás utilizando punteros para que la instancia de la clase Mapa sea compartida entre todas las instancias de la clase Persona. Esta es una forma común de compartir datos entre distintas clases en C++.

En tu código, la clase Persona tiene un puntero a una instancia de la clase Mapa, que se pasa como argumento en el constructor de Persona. Luego, cuando se necesita acceder a los datos del mapa, se utiliza el operador flecha "->" para acceder a los métodos de la instancia de la clase Mapa.

En cuanto a la forma recomendada de hacer esto, depende del contexto específico de tu aplicación y de tus preferencias personales. La solución que has implementado es válida y puede ser utilizada en muchos casos.

Otra opción sería utilizar referencias en lugar de punteros para evitar tener que preocuparse por la asignación y liberación de memoria. También podrías considerar la posibilidad de utilizar patrones de diseño como el patrón Singleton para asegurarte de que solo haya una instancia del mapa en tu programa.

Espero que esto te ayude a resolver tus dudas. ¡Buena suerte con tu juego!






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)