我有一个类Player
,我希望有一个成员primaryWeapon
,可以设置为从类Gun
派生的任意数量的类。只是想知道如何去做这件事。我已经尝试过这样设置,但我不确定从这里开始。
class Player : public Character {
public:
Player();
~Player();
Gun primaryWeapon;
void update();
void move(float horizontal, float vertical);
void fire();
};
答案 0 :(得分:2)
在C ++中使用多态行为时,需要通过引用或指针引用多态对象。您的示例是按值存储Gun
对象,这将导致对象从任何派生类型“切片”到基本类型。
您是否使用引用,原始指针shared_ptr
或unique_ptr
取决于程序的整体设计,但其中一个可以解决问题。
答案 1 :(得分:1)
如果您需要多态行为,则需要primaryWeapon
作为引用,指针或智能指针。引用会阻止您的玩家更改primaryWeapon
这似乎是一种耻辱。留下(智能)指针。如果您的玩家拥有枪支,我建议unique_ptr
:
#include <memory>
class Gun {
public:
virtual ~Gun(){}
};
class Glock : public Gun {};
class Player {
public:
void setPrimaryWeapon(std::unique_ptr<Gun> weapon) {
primaryWeapon = std::move(weapon);
}
private:
std::unique_ptr<Gun> primaryWeapon;
};
int main() {
Player player;
player.setPrimaryWeapon(std::make_unique<Glock>());
}
答案 2 :(得分:0)
你可以使用枪指针来获得primaryWeapon;
boost::shared_pt<Gun> shrdPrimaryWeapon;
然后在Gun中定义多态函数(如getWeaponAmmoForExample)并将其用于:
shrdPrimaryWeapon->getWeaponAmmoForExample();