【发布时间】:2020-04-30 01:03:27
【问题描述】:
我希望提高效率,如何重写 Enemy 类以使用继承和虚函数?包括任何新的子类。
class Enemy
{
public:
int type; // 0 = Dragon, 1 = Robot
int health; // 0 = dead, 100 = full
string name;
Enemy();
Enemy(int t, int h, string n);
int getDamage(); // How much damage this enemy does
};
Enemy::Enemy() : type(0), health(100), name("")
{ }
Enemy::Enemy(int t, int h, string n) :
type(t), health(h), name(n)
{ }
int Enemy::getDamage() {
int damage = 0;
if (type == 0) {
damage = 10; // Dragon does 10
// 10% change of extra damage
if (rand() % 10 == 0)
damage += 10;
}
else if (type == 1) {
// Sometimes robot glitches and does no damage
if (rand() % 5 == 0)
damage = 0;
else
damage = 3; // Robot does 3
}
return damage;
}
这会计算乐队将造成的总伤害。
int calculateDamage(vector<Enemy*> bandOfEnemies)
{
int damage = 0;
for (int i = 0; i < bandOfEnemies.size(); i++)
{
damage += bandOfEnemies[i]->getDamage();
}
return damage;
}
【问题讨论】:
-
是的,继承、虚函数和多态一般来说似乎是一个不错的选择。
-
在决定接口之前 - 你应该首先弄清楚你需要什么。如果你只有一个 Enemy 类型,那么就不需要任何东西。如果你想要各种各样的 Enemy 类而不是找出哪些方法可能不同然后虚拟化。
标签: c++ inheritance virtual-functions