作业需求:
声明一个英雄类,成员属性:英雄名字、血量,定义成员函数攻击水晶(纯虚函数)
声明一个坦克类,继承自英雄类,新增属性:攻击力,重写攻击水晶函数,水晶下降血量为基础伤害(自定义)+坦克英雄攻击力
声明一个刺客类,继承自英雄类,新增属性:惩戒,重写攻击水晶函数,水晶下降血量为基础伤害(自定义)+惩戒量
定义全局函数fun,传入不同的英雄类对象,函数体内调用攻击水晶函数。
主测试文件中,完成相关函数的测试功能
实现过程:
#include <iostream>
using namespace std;
class hero
{
public:
string name;
int hp;
static int ctr_hp;
static int base;
hero() {}
hero(string n,int h):name(n),hp(h){}
virtual ~hero(){}
virtual void attack()=0;
virtual void show()=0;
};
int hero ::ctr_hp=100000;
int hero ::base=100;
class tank : public hero
{
private:
int agg;
public:
tank() {}
tank(string n,int h,int a):hero(n,h),agg(a){}
virtual ~tank() {}
void attack()
{
ctr_hp=ctr_hp-(base+agg);
cout<<name<<"对水晶造成"<<base+agg<<"点伤害"<<endl;
cout<<"水晶还剩"<<ctr_hp<<"点生命值"<<endl;
}
void show()
{
cout<<"坦克英雄名为 "<<name<<endl;
cout<<"坦克英雄hp为 "<<hp<<endl;
}
};
class assassin : public hero
{
private:
int pun;
public:
assassin() {}
assassin(string n,int h,int p):hero(n,h),pun(p){}
virtual ~assassin() {}
void attack()
{
ctr_hp=ctr_hp-(base+pun);
cout<<name<<"对水晶造成"<<base+pun<<"点伤害"<<endl;
cout<<"水晶还剩"<<ctr_hp<<"点生命值"<<endl;
}
void show()
{
cout<<"刺客英雄名为 "<<name<<endl;
cout<<"刺客英雄hp为 "<<hp<<endl;
}
};
void fun(hero &H)
{
H.attack();
}
void dispaly(hero &T)
{
T.show();
}
int main()
{
tank t1("程咬金",8000,50);
assassin a1("兰陵王",5200,75);
dispaly(t1);
dispaly(a1);
fun(t1);
fun(a1);
return 0;
}
实验结果:
![](https://i-blog.csdnimg.cn/blog_migrate/38e172919653f6749a5e4b9edcb03866.png)