рассмотреть эти классы (упрощенно)
class Character
{
public:
char name[20];
char type[20];
int strength;
};
class inventoryItem
{
public:
char name[20];
};
class weapon: public inventoryItem
{
public:
int magical resistance;
};
class spell: public inventoryItem
{
public:
int magical power;
};
я написал класс для связанного списка (не разрешено использовать список STL)
class list
{
public:
struct listItem
{
listItem* objectPointer;
listItem* pnext;
}*phead;list()
{
phead=NULL;
}
bool isEmpty(){
if (!phead)
return true;
else
return false;
}
void addToBack(listItem *itemtoadd)
{
listItem *ptemp;
listItem *ppast;
listItem *pNewItem;
pNewItem=new listItem();
pNewItem->objectPointer=itemtoadd;
pNewItem->pnext=NULL;
if (phead==NULL)
phead=itemtoadd;
else
{
ptemp=phead;
while(ptemp)
{
ptemp= ptemp->pnext;
}
ptemp->pnext=itemtoadd;
}
}
};
Я много сократил это, но мой вопрос, есть ли простой способ создать связанные списки для всех этих, используя тот же класс списка? или я трачу свое время?
каждый раз, когда я пытался это сделать, я не могу преобразовать указатель из типа «оружие» в тип «listitem»
Мне нужен список персонажей и список каждого оружия или заклинания для этого персонажа
Я все еще начинающий с ООП и указателями,
у меня есть программа, которая сейчас компилируется, и у меня есть список работающих символов, однако этот список не управляется классом, которым он управляет в некоторых других функциях, я надеюсь, что один класс сможет справиться со всем этим, может кто-нибудь помочь объясни мне это?
Взгляни на Шаблоны C ++. Используя шаблоны, вы можете иметь один класс списка с точки зрения чтения / записи кода, но вы можете иметь список оружия, список предметов или список чего-либо еще без необходимости писать классы WeaponsList, ItemsList и SomethingElseList отдельно.
Простой ответ — сделать это
struct listItem
{
void* objectPointer;
listItem* pnext;
}*phead;
Пустой указатель позволит вам сохранить указатель на что-либо. Конечно, тогда вы полностью должны убедиться, что не потеряете отслеживание того, на какой объект вы указываете. Так что такой подход рискован. Более безопасный подход — шаблоны, как было предложено.
Вы можете использовать:
enum item
{
WEAPON,SPELL
}
class list {
public:
struct listItem {
union {
weapon *weaponPointer;
spell *spellPointer
} object;
item objType;
listItem* pnext;
}*phead;
однако выгода заключается в том, что вам нужно получить доступ к члену типа, чтобы определить, к какому типу элемента вы обращаетесь.