/声明一个英雄类,成员属性:英雄名字、血量,定义成员函数攻击水晶(纯虚函数)//声明一个坦克类,继承自英雄类,新增属性:攻击力,重写攻击水晶函数,水晶下降血量为基础伤害(自定义)+坦克英雄攻击力//声明一个刺客类,继承自英雄类,新增属性:惩戒,重写攻击水晶函数,水晶下降血量为基础伤害(自定义)+惩戒量//定义全局函数fun,传入不同的英雄类对象,函数体内调用攻击水晶函数。//主测试文件中,完成相关函数的测试功能
//声明一个英雄类,成员属性:英雄名字、血量,定义成员函数攻击水晶(纯虚函数)
//声明一个坦克类,继承自英雄类,新增属性:攻击力,重写攻击水晶函数,水晶下降血量为基础伤害(自定义)+坦克英雄攻击力
//声明一个刺客类,继承自英雄类,新增属性:惩戒,重写攻击水晶函数,水晶下降血量为基础伤害(自定义)+惩戒量
//定义全局函数fun,传入不同的英雄类对象,函数体内调用攻击水晶函数。
//主测试文件中,完成相关函数的测试功能
#include <iostream>
using namespace std;
class Hero
{
public:
virtual void attack()=0 ; //纯虚函数
protected:
string name; //英雄的名字
static double blood;
int base=100; //基础伤害为100;
};
double Hero ::blood=10000; //水晶的血量为10000
class Tank:public Hero
{
public:
Tank(){} //无参构造
Tank(double s):atk(s){} //有参构造将英雄的攻击力传过来
void attack() override //函数重写
{
blood-=(base+atk);
}
void show()
{
cout<<"基础伤害:"<<base<<endl;
cout<<"英雄攻击力"<<atk<<endl;
cout<<"水晶血量:"<<blood<<endl;
}
protected:
double atk;//坦克攻击力
};
class Thug:public Hero
{
public:
Thug(){} //无参构造
Thug(double s):take(s){} //有参构造将英雄的攻击力传过来
void attack() override //函数重写
{
blood-=(base+take);
}
void show()
{
cout<<"基础伤害:"<<base<<endl;
cout<<"英雄攻击力:"<<take<<endl;
cout<<"水晶血量:"<<blood<<endl;
}
protected:
double take;//刺客攻击力
};
void fun(Tank &n)
{
n.attack();
}
void fun(Thug &n)
{
n.attack();
}
int main()
{
Thug t=123;
fun(t);
t.show();
Tank l=234;
fun(l);
l.show();
return 0;
}
结果如下
![](https://img-blog.csdnimg.cn/img_convert/b6fee13bbd4663f7ee5100358923a35b.png)