题目:
1:声明一个英雄类,成员属性:英雄名字、血量,定义成员函数攻击水晶(纯虚函数)
2:声明一个坦克类,继承自英雄类,新增属性:攻击力,重写攻击水晶函数,水晶下降血量为基础伤害(自定义)+坦克英雄攻击力
3:声明一个刺客类,继承自英雄类,新增属性:惩戒,重写攻击水晶函数,水晶下降血量为基础伤害(自定义)+惩戒量
4:定义全局函数fun,传入不同的英雄类对象,函数体内调用攻击水晶函数。
5:主测试文件中,完成相关函数的测试功能
程序:
#include <iostream>
using namespace std;
int basic_blood=100; // 定义基础伤害
int crystal_blood=2000; //定义水晶血量
class hero
{
protected:
string name;
int blood;
public:
hero(){cout<<"hero无参构造"<<endl;} //无参构造
virtual ~hero(){cout<<"虚析构"<<endl;} //虚析构
hero(string n,int b):name(n),blood(b){cout<<"hero有参构造"<<endl;} //有参构造
virtual void attack()=0; //纯虚函数
};
class tank:public hero
{
protected:
int aggressivity;
public:
tank(){cout<<"tank无参构造"<<endl;} //无参构造
~tank(){cout<<"虚析构"<<endl;}
tank(string n,int b,int a):hero(n,b),aggressivity(a){cout<<"tank有参构造"<<endl;} //有参构造
virtual void attack()
{
int temp=basic_blood+aggressivity;
crystal_blood-=temp;
cout<<name<<"对水晶的伤害:"<<temp<<endl;
cout<<"水晶剩余血量:"<<crystal_blood<<endl;
}
};
class assassin:public hero
{
protected:
int discipline;
public:
assassin(){cout<<"assassin无参构造"<<endl;} //无参构造
~assassin(){cout<<"虚析构"<<endl;}
assassin(string n,int b,int d):hero(n,b),discipline(d){cout<<"assassin有参构造"<<endl;} //有参构造
virtual void attack()
{
int temp=basic_blood+discipline;
crystal_blood-=temp;
cout<<name<<"对水晶的伤害:"<<temp<<endl;
cout<<"水晶剩余血量:"<<crystal_blood<<endl;
}
};
void fun(hero &r)
{
r.attack();
}
int main()
{
cout<<"水晶总血量:"<<crystal_blood<<endl;
tank t("程咬金",200,150);
assassin a("李白",300,200);
fun(t);
fun(a);
return 0;
}
运行效果: