考虑这些类(简化)
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'类型 我需要一个角色列表以及该角色的每个武器或咒语列表 我仍然是OOP和指针的初学者, 我现在编译的程序,我有一个工作的字符列表,但是列表不是由其在其他一些函数中管理的类管理的,我希望有一种方法可以让一个类处理它,任何人都可以帮助向我解释一下?
答案 0 :(得分:1)
看看C++ Templates。使用模板,您可以在读/写代码方面拥有一个列表类,但是您可以拥有武器列表,项列表或其他任何内容列表,而无需单独编写WeaponsList,ItemsList和SomethingElseList类。
答案 1 :(得分:1)
简单的答案就是这样做
struct listItem
{
void* objectPointer;
listItem* pnext;
}*phead;
void指针允许您存储指向任何内容的指针。当然,完全取决于你确保你不会忘记你指向的是什么类型的对象。所以这种方法很危险。更安全的方法是建议的模板。
答案 2 :(得分:0)
您可以使用:
enum item
{
WEAPON,SPELL
}
class list {
public:
struct listItem {
union {
weapon *weaponPointer;
spell *spellPointer
} object;
item objType;
listItem* pnext;
}*phead;
但是,您必须访问类型成员才能确定要访问的项目类型。