我有这个名为士兵的班级,在我的项目中,每个士兵都必须拥有武器,我有5种不同类型的武器,每类武器类型都继承自“武器”类。 我如何在士兵类中制作一个构造函数,以便士兵可以获得任何类型的武器? 我想为每种类型的武器制作5种不同的构造器,但这没有多大意义
答案 0 :(得分:0)
说武器是所有武器的基类。假设你有两种武器类型枪和刀:
class Weapon { virtual void shot() = 0; }
class Gun : public Weapon { virtual void shot() { cout << "Gun"; }
class Knife : public Weapon { virtual void shot() { cout << "Knife"; }
class Soldier {
Weapon *weapon;
public:
Soldier() : weapon(nullptr) {}
Soldier(Weapon* w) : weapon(w) {}
void SetWeapon(Weapon* w) { weapon = w; }
Weapon* GetWeapon() { return weapon; }
}
在Real字代码中,您会考虑使用RAII或smart_poin来保存和删除Weapon *对象,否则可能会发生内存泄漏。
答案 1 :(得分:-2)
在您的士兵课上,您可以拥有以下内容:
#include "weapon.h"
class Soldier {
Weapon *weapon;
public:
Soldier(Weapon *weapon) {
this->weapon = weapon;
}
};
当你要训练班级士兵时:
Weapon *w1 = new Knife(), *w2 = new M1();
Soldier s1(w1), s2(w2);