3、(封装、继承、多态)创建三个类,组成一个继承树,表示游戏中
的角色。描述如下:"
父类:Role。是所有职业的父类。属性:name,表示角色的名字。"
方法:public int attack),该方法返回值为角色攻击对敌人的伤害。
Role 有两个子类:
1)法师Magicer 属性:魔法等级(范围为1~10)方法:public
int attack,该方法返回法师的攻击对敌人造成的伤害值。 法师攻
击伤害值为:魔法等级*魔法基本伤害值(固定为5)
2) 战士 Soldier 属性:攻击伤害值方法:public int attack(),
该方法返回战士的攻击对敌人造成的伤害值。战士的攻击伤害值为:
其攻击伤害属性值 注意:上述的三个类所有属性都应当作为私有,
并提供相应的 get/set 方法。
再设计一个 Team 类,表示一个组队。具有如下方法
addMember,表示组队增加一个成员。注意:组队成员最多为6人"
#include <iostream>
#include <string>
using namespace std;
// 父类: Role
class Role {
private:
string name;
public:
Role(string name) : name(name) {} // 构造函数
string getName() { return name; } // get方法
void setName(string name) { this->name = name; } // set方法
virtual int attack() = 0; // 纯虚函数:攻击方法
};
// 子类: Magicer
class Magicer : public Role {
private:
int magicLevel; // 魔法等级
public:
Magicer(string name, int magicLevel) : Role(name), magicLevel(magicLevel) {} // 构造函数
int getMagicLevel() { return magicLevel; } // get方法
void setMagicLevel(int magicLevel) { this->magicLevel = magicLevel; } // set方法
int attack() { return magicLevel * 5; } // 攻击方法
};
// 子类: Soldier
class Soldier : public Role {
private:
int damage; // 攻击伤害值
public:
Soldier(string name, int damage) : Role(name), damage(damage) {} // 构造函数
int getDamage() { return damage; } // get方法
void setDamage(int damage) { this->damage = damage; } // set方法
int attack() { return damage; } // 攻击方法
};
// Team类
class Team {
private:
Role** members; // 成员数组
int count; // 成员数量
public:
Team() : members(new Role*[6]), count(0) {} // 构造函数
void addMember(Role* member) { // 添加成员方法
if (count < 6) {
members[count] = member;
count++;
cout << member->getName() << "加入队伍" << endl;
}
else {
cout << "队伍已满,无法添加成员" << endl;
}
}
};
示例代码可以这样调用:
int main() {
Magicer* magicer = new Magicer("Tom", 6);
Soldier* soldier = new Soldier("Jerry", 20);
cout << magicer->getName() << "的攻击力为:" << magicer->attack() << endl;
cout << soldier->getName() << "的攻击力为:" << soldier->attack() << endl;
Team team;
team.addMember(magicer);
team.addMember(soldier);
delete magicer;
delete soldier;
return 0;
}