Может быть, что-то вроде этого:
class Player
{
public:
virtual std::string& get_name() const = 0;
};
class GameEngine
{
public:
std::vector<Player *> m_players;
void add_player(Player * p)
{
m_players.push_back(p);
}
};
Выше суть вашего вопроса. add_player
добавляет игрока в вашу базу данных.
Более широкий взгляд:
class Shaman
: public Player
{
std::string m_name;
public:
virtual std::string& get_name() const
{
return m_name;
}
Shaman()
: m_name("Bubba")
{ ; }
};
Выше приведен пример класса, производного от Player
.
Фрагмент кода для создания динамического экземпляра и добавления в GameEngine
:
Shaman * p_bubba = new Shaman;
GameEngine game;
game.add_player(p_bubba);
Помните, что класс GameEngine
знает только об открытых функциях и членах в Player
. В C ++ нет внутренних средств для извлечения имени типа дочерних типов в базе данных m_player
. Я рекомендую предоставить все функции, которые GameEngine
должен знать в классе Player
, и позволить потомкам реализовать эти функции.