gpt4 book ai didi

c++ - 我创建了 deque 并添加了不同类型的元素。我怎样才能改变这个元素的属性?

转载 作者:行者123 更新时间:2023-11-28 04:40:47 24 4
gpt4 key购买 nike

我创造了:

class CMap:{
public
std::deque<CObject*> obiekty;
}


class CBullet{
public:
int damage;
}

并且我添加了不同类型的元素(例如 CTank、CBullet...)我想使用双端队列更改属性

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)继承你的派生类(CBulletCTank),像这样

//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();
}

关于c++ - 我创建了 deque<CObject*> 并添加了不同类型的元素。我怎样才能改变这个元素的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50215851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com