Это хорошее начало, но с наследованием вам не нужно быть таким конкретным c. Например, в классе врага у вас есть атрибут type
. Если вы хотите использовать наследование, вам не нужно указывать type
, потому что производный класс будет type
.
Что касается вашей функции getDamage()
, вы можете оставить ее пустой и превратить его в виртуальную функцию. Собрав все это вместе, ваш код должен выглядеть примерно так:
class Enemy
{
public:
int health; // 0 = dead, 100 = full
string name;
Enemy();
Enemy(int t, int h, std::string n);
virtual int getDamage() = 0; // pure virtual function
};
Enemy::Enemy()
: type(0), health(100), name("") {}
Enemy::Enemy(int t, int h, std::string n)
: type(t), health(h), name(n) {}
// class 'Dragon' inherits from class 'Enemy'
class Dragon : public Enemy
{
public:
Dragon() {}
int getDamage()
{
// dragon's damage
}
};
Обратите внимание, что если вы хотите создать другого врага, вы просто наследуете от класса Enemy
. И таким образом, вы можете хранить свои символы в массиве так:
vector<Enemy> enemies = {
Dragon(),
Dragon(),
Robot()
};