заголовок может быть немного вводящим в заблуждение, но я хочу дать некоторому экземпляру класса экземпляр другого класса посредством полиморфизма.Я думаю, что это могло быть еще более обманчивым, поэтому я приведу пример:
Скажем, у меня есть класс с именем Spell
, который является родительским классом для класса Firebolt
.Я хочу, чтобы другой класс, скажем, Character
, имел возможность хранить заклинание «Firebolt» в своей памяти без необходимости включать файлы «Firebolt» в #.
Теперь я могу придумать, как предыдущие игры делали это раньше.Присваивая каждому заклинанию (или какому-либо другому определенному типу класса) статический идентификатор или имя строки const, и в заклинании есть некоторая функция, которая может получить доступ к этому идентификатору / имени и return
a new Firebolt()
, если они одинаковы.
Это звучит довольно неплохо, проблема в том, что я не знаю, как это кодировать.Я не уверен, как мне получить доступ к этим идентификаторам из родительского класса, и я не уверен, как создать виртуальную функцию, которая на самом деле будет возвращать правильный Spell
.Любая помощь будет потрясающей.Я также предоставлю фактический код класса, с которым я работаю здесь, на случай, если он может помочь вам, ребята, ответить или кому-то с подобной проблемой, чтобы решить ее.
Родительский класс;
class Art {
std::string name;
int EPCost;
int castTime;
int AoESize;
public:
Art(std::string n, int cp, int ct, int as):name(n), EPCost(cp), castTime(ct), AoESize(as) {}
virtual ~Art() {}
static Art* findArt(std::string ID);
int getAoESize() {return AoESize;}
std::string getName() {return name;}
int getEPCost() {return EPCost;}
virtual int getBaseDamage() = 0;
};
Подкласс;
class FireBolt:public Art {
static const std::string name;
static const int EPCost;
static const int castTime;
static const int AoESize;
static const std::string ID;
public:
FireBolt():Art(name, EPCost, castTime, AoESize) {}
~FireBolt() {}
int getBaseDamage();
};