自学内容网 自学内容网

11.25c++继承、多态

练习:

编写一个 武器类
class Weapon{
    int atk;
}

编写3个武器派生类:短剑,斧头,长剑
class knife{
    int spd;
}

class axe{
    int hp;
}

class sword{
    int def;
}

编写一个英雄类
class Hero{
    int atk;
    int def;
    int spd;
    int hp;
public:
    所有的get set 方法
    void equipWeapon(Weapon*)
    根据传入的武器不同,英雄获得不同的属性加成
}

代码实现: 

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <myhead.h>
using namespace std;  

class Weapon;
class Hero{
private:
int atk;
int def;
int spd;
int hp;
public:
Hero(int atk=0,int def=0,int spd=0,int hp=0):spd(spd),hp(hp),def(def),atk(atk){}
void setAtk(int atk){
this->atk=atk;
}
void setSpd(int spd){
this->spd=spd;
}
void setHp(int hp){
this->hp=hp;
}
void setDef(int def){
this->def=def;
}
int getAtk(){
return this->atk;
}
int getSpd(){
return this->spd;
}
int getHp(){
return this->hp;
}
int getDef(){
return this->def;
}
void equipweapon(Weapon* w);
void showProptery(){
cout << "h p=" << hp << endl;
cout << "spd=" << spd << endl;
cout << "def=" << def << endl;
cout << "atk=" << atk << endl;
cout << "-------------" << endl;
}
};
  
class Weapon{
private:
int atk;
public:
Weapon(int atk=0):atk(atk){}

void setAtk(int atk){
this->atk=atk;
}
int getAtk(){
return this->atk;
}
virtual void addProptery(Hero& hero){}
};
class Knife:public Weapon{
private:
int spd;
public:
Knife(int atk=1,int spd=1):Weapon(atk),spd(spd){}
void setSpd(int spd){
this->spd=spd;
}
int getSpd(){
return this->spd;
}
virtual void addProptery(Hero& hero){
int atk=hero.getAtk()+this->getAtk();
int spd=hero.getSpd()+this->spd;
hero.setAtk(atk);
hero.setSpd(spd);
}

};
class Axe:public Weapon{
private:
int hp;
public:
Axe(int atk=1,int hp=1):Weapon(atk),hp(hp){}
void setHp(int hp){
this->hp=hp;
}
int getHp(){
return this->hp;
}
virtual void addProptery(Hero& hero){
int atk=hero.getAtk()+this->getAtk();
int hp=hero.getHp()+this->hp;
hero.setAtk(atk);
hero.setHp(hp);
}
};
class Sword:public Weapon{
private:
int def;
public:
Sword(int atk=1,int def=1):Weapon(atk),def(def){}
void setDef(int def){
this->def=def;
}
int getDef(){
return this->def;
}
virtual void addProptery(Hero& hero){
int atk=hero.getAtk()+this->getAtk();
int def=hero.getDef()+this->def;
hero.setAtk(atk);
hero.setDef(def);
}
};
void Hero::equipweapon(Weapon* w){
w->addProptery(*this);
}

int main(int argc,const char **argv){
Hero h1,h2,h3;
Knife k;
Sword s;
Axe a;
h1.equipweapon(&k);
h2.equipweapon(&s);
h3.equipweapon(&a);
h1.showProptery();
h2.showProptery();
h3.showProptery();
return 0;
}


原文地址:https://blog.csdn.net/qq_40378766/article/details/144067766

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!