我创建了deque<CObject*>并添加了不同类型的元素。如何更改此元素的属性?
I created deque<CObject*> and added different type of element. How can I change attribute of this elements?
我创建了:
class CMap:{
public
std::deque<CObject*> obiekty;
}
class CBullet{
public:
int damage;
}
我添加了不同类型的元素(例如 唔唔�� 我想要使用 deque 更改属性
for( size_t i=0; i<game->Mapa->obiekty.size(); i++){
if(typeid(*(game->Mapa->obiekty[i]))==typeid(CBullet)){
this->HP=this->HP - game->Mapa->obiekty[i] (?? my problem/I can't do it ?? ->damage);
}
}
首先你需要从基类(CObject
(继承你的派生类(CBullet
,CTank
(,像这样
//Base clase
class CObject
{
public:
//...
virtual ~CObject(){}; // Don't forget about virtual desctructor
};
class CBullet: public CObject
{
public:
//...
~CBullet(){};
void DoBulletMethod(){};
};
class CTank: public CObject
{
public:
//...
~CTank(){};
void DoTankMethod(){};
};
然后你可以通过dynamic_cast
检查所有对象,如下所示:
for( size_t i=0; i< game->Mapa->obiekty.size(); i++)
{
if(dynamic_cast<CBullet*>(game->Mapa->obiekty[i]) != nullptr)
{
CBullet * BulletObj = dynamic_cast<CBullet*>(game->Mapa->obiekty[i]);
BulletObj->DoBulletMethod();
}
else if(dynamic_cast<CTank*>(game->Mapa->obiekty[i]) != nullptr)
{
CTank * TankObj = dynamic_cast<CTank*>(game->Mapa->obiekty[i]);
TankObj->DoTankMethod();
}
}
或者,您可以使用多态性并创建虚拟方法,而无需进一步检测当前对象类型,例如在基类中创建一个虚拟方法并在派生类中重写它:
//Base clase
class CObject
{
public:
//...
virtual ~CObject(){}; // Don't forget about virtual desctructor
virtual void DoActionInLoop()
{
//No action in base class
}
};
class CBullet: public CObject
{
public:
//...
~CBullet(){};
virtual void DoActionInLoop() override
{
std::cout << "I am bullet I can do here my tasks" << std::endl;
}
};
class CTank: public CObject
{
public:
//...
~CTank(){};
virtual void DoActionInLoop() override
{
std::cout << "I am tank and I can do here my tasks" << std::endl;
}
};
然后只需在每个CObject*
实例上调用此方法并获取多态性:
for( size_t i=0; i< game->Mapa->obiekty.size(); i++)
{
game->Mapa->obiekty[i]->DoActionInLoop();
}
相关文章:
- 我有一个嵌套数组,它由另一个数组中的元素组成,这些元素分组为2.之后,我想显示每个元素的属性
- 如何使用 boost 属性树来解析 boost 中 json 字符串中的数组中的元素?
- 我创建了deque<CObject*>并添加了不同类型的元素。如何更改此元素的属性?
- 使用提升属性树检查 xml 文件中是否存在元素
- 使用 CDT 从头文件中获取属性定义的节点元素是什么
- 对大于属性的元素的矢量对象进行二进制搜索
- 迭代向量中属性具有特定值的元素范围
- 提升属性树获取第一个元素
- 计算矢量中的元素属性
- 根据属性值在结构向量中擦除元素
- 我可以为我的自定义Qt UI元素定义自定义CSS/QSS属性吗?
- 多属性排序是反转元素
- CodeSynthesis XSD CXX 不解析 XML 文件,表示未声明属性/元素
- 访问vector元素属性的最佳方法
- Boost属性树,迭代器插入元素
- 在vector的最后一个元素中插入属性
- 根据元素的属性从列表中选择元素
- 在 c++ 中,当模板化向量是另一个向量的元素时,访问该向量的属性
- c ++如何在向量中的特定位置显示元素的字符串属性
- 在Qt 5.0中将QAbstractListModel元素属性暴露给QML