【发布时间】:2018-06-20 01:55:54
【问题描述】:
我正在制作一个基于文本的冒险游戏(我知道是原创的。)但我遇到了一个问题。我想让玩家拿起一个物品,然后根据它所属的Item的子类自动将它放在它所属的位置。我已经设置好,当玩家在当前房间输入“get”后跟一个对象的名称时,会调用以下函数:
void Game::PickUp(Item * item)
{
m_map.at(m_player.GetLoc())->RemoveItem(item); //Remove item from the room
m_player.AddItem(item); //Add item to the player
}
在Player 类中,我重载了AddItem(…),如下所示:
void AddItem(Armor* armor)
{
delete m_armor;
m_armor = armor;
}
void AddItem(Weapon* weapon)
{
delete m_weapon;
m_weapon = weapon;
}
void AddItem(Shield* shield)
{
delete m_shield;
m_shield = shield;
}
void AddItem(Item* item)
{
m_pack.push_back(item);
}
当我运行代码时,它只调用void AddItem(Item* item),这是有道理的,因为这是传递给前一个函数的内容,但由于传递的对象保存在vector<Item*> 中,我不能将它作为其他任何东西传递.有没有办法检测被传递对象的子类并调用正确的重载?
【问题讨论】:
标签: c++ polymorphism