c++中不同对象的多个链表



考虑这些类(简化)

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;
}
}
};

我已经削减了很多,但我的问题是,有没有一个简单的方法来创建所有这些使用相同的列表类链表?还是我在浪费时间?

每次我尝试它不能转换指针类型从"武器"到类型"列表"
我需要一个角色列表和每个角色的武器或咒语列表
我还是OOP和指针的初学者,我现在已经编译的程序,我有一个字符工作列表,但是列表不是由类管理的,它在一些其他函数中管理,我希望有一种方法可以让一个类处理这一切,谁能帮助解释给我吗?

看一下c++模板。使用模板,您可以在阅读/编写代码方面拥有一个列表类,但您可以拥有武器列表,物品列表或其他任何列表,而无需分别编写WeaponsList, ItemsList和SomethingElseList类。

简单的答案是这样做

struct listItem
{
    void* objectPointer;
    listItem* pnext;
}*phead;

void指针允许存储指向任何对象的指针。当然,这完全取决于你来确保你不会忘记你所指向的对象。所以这种方法是有风险的。更安全的方法是模板。

您可以使用:

enum item
{
    WEAPON,SPELL
}
class list {
public:
    struct listItem {
        union {
            weapon *weaponPointer;
            spell *spellPointer
        } object;
        item objType;
        listItem* pnext;
    }*phead;

但是,问题是必须访问type成员来确定要访问的项的类型

相关内容

  • 没有找到相关文章

最新更新