【发布时间】:2014-05-24 07:39:11
【问题描述】:
作为学习C++后的练习程序,我正在开发一款基于文本的游戏。我正在使用面向对象的编程风格来处理世界/它们的对象。以下是有关其定义的必要信息:
class Object
{
private:
unsigned int id;
public:
unsigned int getID() const { return id; }
};
class TakeableObject: public Object
{
...
};
class EdibleObject: public TakeableObject
{
private:
float healthEffect;
float staminaEffect;
public:
float getHealthEffect() const { return healthEffect; }
float getStaminaEffect() const { return staminaEffect; }
};
class Player
{
private:
float health;
float stamina;
TakeableObject inventory[256];
public:
eat(const EdibleObject* o)
{
health += o->getHealthEffect();
stamina += o->getStaminaEffect();
}
eat(int id)
{
if (inventory[id] == NULL)
throw "No item with that ID!";
eat((EdibleObject) inventory[id]);
inventory[id] = NULL;
}
};
所以我的问题是 - 在Player::eat(int) 中,有没有办法可以确保Player::inventory[id] 中的Object 是EdibleObject(也许通过异常处理?)
【问题讨论】:
-
应该更新 Stackoverflow 以拒绝不包含问号的问题。 :-)
-
抱歉,误按了 Enter 键。我正在写完这篇文章
-
为什么这个问题被关闭了?这不是那不清楚。
-
为什么
inventory使用固定大小的数组?将其设为map,您的问题就会自行解决。 -
@BenjaminBannier 每个对象都有一个特定的 ID - 由于协议,世界上只能有 255 个对象。
标签: c++ inheritance casting