第六周项目28-用多文件组织多个类的程序(带武器的角色类)

来源:互联网 发布:中国电信4g网络频段 编辑:程序博客网 时间:2024/06/05 05:32

问题及代码:

//文件1,类的定义,Weapon.h

#ifndef SADF#define SADF#include<string>using namespace std;class Weapon{public:    Weapon(string wnam, int f);    int getForce();private:    string wname;   //名称    int force;       //威力};#endif/*因为重复包含头文件,所以要在开头结尾加上#ifndef SADF   #define SADF    #endif*/

//文件2,类的定义,Role.h

#include"Weapon.h"class Role{public:    Role(string nam, int b, string wnam, int f); //构造函数    ~Role(); //析构函数    void eat(int d); //吃东西,涨d血    void attack(Role &r); //攻击别人,自己涨血,同时失血    bool isAlived(); //是否活着    void show(); //显示private:    string name;    int blood;    Weapon weapon;    bool life;};
//文件3,类的实现,Weapon.cpp

#include<iostream>using namespace std;#include"Weapon.h"Weapon::Weapon(string wnam, int f):wname(wnam),force(f) {}int Weapon::getForce(){    return force;}
//文件4,类的实现,Role.cpp

#include<iostream>#include"Weapon.h"#include"Role.h"using namespace std;Role::Role(string nam, int b, string wnam, int f):name(nam),blood(b),weapon(wnam,f){    if(blood>0)        life=true;    else        life=false;}Role::~Role(){    cout<<name<<"退出江湖..."<<endl;}void Role::eat(int d) //吃东西,涨d血{    if(isAlived())        blood+=d;}void Role::attack(Role &r) //攻击别人,涨1血{    if(isAlived())    {        blood+=weapon.getForce();        r.blood-=weapon.getForce();        if(r.blood<=0)            r.life=false;    }}bool Role::isAlived() //是否活着{    return life;}void Role::show() //显示{    cout<<name<<" has "<<blood<<" blood, it is ";    if(isAlived())        cout<<"alived.";    else        cout<<"dead.";    cout<<endl;}
文件5,主函数,demo.cpp

#include <iostream>using namespace std;#include"Role.h"int main( ){    Role mary("Mary", 500, "TuLong",200);    Role jack("Jack", 10, "YiTian", 180);    cout<<"---begin---"<<endl;    mary.show();    jack.show();    cout<<"---1st round---"<<endl;    jack.attack(mary);    mary.show();    jack.show();    cout<<"---2nd round---"<<endl;    mary.attack(jack);    mary.show();    jack.show();    cout<<"---end---"<<endl;    return 0;}

运行结果:

知识点总结:

在写本程序的时候,发现总是会提示class' type redefinition,最终发现需要在Weapon.h头文件中添加上编译预处理指令才能通过,否则将是重复包含头文件,会出现错误。

学习心得:

使用分文件来编写程序可以使程序模块化,简洁化,看起来更加的直观。




0 0
原创粉丝点击