今天才发现C++多文件时应如何编写: 以C++实验课任务为例
1、对于一个类即理解为一个模块:
将类的定义写入一个.h文件
类的成员函数等写入一个.cpp文件
2、1)Monster类
monster.h
#ifndef _MONSTER_H_
#define _MONSTER_H_
//定义怪兽类
class Monster
{
protected:
int rank;
int exp;
int hp;
int damage;
int money;
public:
//构造函数
Monster(int r = 1, int e = 0, int h = 50, int d = 5, int m = 10);
//怪兽初始属性值随机生成
void set_rand();
//输出属性
void display();
//设置属性
void sethp(int h);
//获取属性
int gethp();
int getexp();
int getmoney();
void setmoney(int m);
int getdamage();
}
#endif
monster.cpp
#include "Monster.h"
//定义怪兽类
//构造函数
Monster::Monster(int r, int e, int h, int d, int m)
{
rank = r;
exp = e;
hp = h;
damage = d;
money = m;
}
//怪兽初始属性值随机生成
void Monster::set_rand()
{
srand(time(NULL));
rank = rand()%10+1;
hp = (rand()%rank+1)*5;
exp = rand()%rank+1;
damage = rand()%rank+1;
money = rand()%rank+1;
}
//输出属性
void Monster::display()
{
cout << "怪兽:\t" << hp << " \t" << rank << "\t" << damage <<
"\t" << exp << "\t" << money << endl;
}
//设置属性
void Monster::sethp(int h)
{
hp=h;
}
void Monster::setmoney(int m)
{
money = m;
}
//获取属性
int Monster::gethp()
{
return hp;
}
int Monster::getexp()
{
return exp;
}
int Monster::getmoney()
{
return money;
}
int Monster::getdamage()
{
return damage;
}
2)Ultraman类
Ultraman.h
#ifndef _ULTRAMAN_H_
#define _ULTRAMAN_H_
#include "Monster.h"
//超人类
class Ultraman
{
protected:
int rank;
int exp;
int hp;
int damage;
int money;
public:
Ultraman(int r=1, int e=0, int h=10, int d=1, int m=0);//构造函数
void display(); //打印属性
void attack(Monster &m); //攻击
void attacked(Monster &m);//被攻击
bool isalive(); //判断活着
void restore(); //恢复生命值
void escape(); //逃跑
void win(Monster &m); //获胜
void upgrade(); //升级
};
Ultraman.cpp
#include "Ultraman.h"
Ultraman::Ultraman(int r, int e, int h, int d, int m)
{
rank=r;
exp=e;
hp=h;
damage=d;
money=m;
}
void Ultraman::display()
{
cout << "奥特曼:\t" << hp << " \t" << rank << "\t" << damage <<
"\t" << exp << "\t" << money << endl;
}
//攻击
void Ultraman::attack(Monster &m)
{
int h = m.gethp();
int mon = m.getmoney();
int e = m.getexp();
if (h>damage)
{
m.sethp(h-damage);
attacked(m);
if((mon % 2) && (mon > 0))
{
money++;
m.setmoney(--mon);
}
exp++;
//可能会升级
upgrade();
}
else
{
m.sethp(0);
win(m);
}
}
//被攻击
void Ultraman::attacked(Monster &m)
{
hp -= (m.getdamage()/2);
}
//判断活着
bool Ultraman::isalive()
{
return hp>0;
}
//恢复生命值
void Ultraman::restore()
{
if(money < 10)
cout << "金币不足" << endl;
while(1)
{
if(money >= 10)
{
money -= 10;
hp++;
}
else
break;
}
}
//逃跑
void Ultraman::escape()
{
hp--;
}
//获胜
void Ultraman::win(Monster &m)
{
exp = exp + m.getexp();
money = money + m.getmoney();
//可能会升级
upgrade();
}
//升级
void Ultraman::upgrade()
{
while(1)
{
if(exp >= 10*rank)
{
exp -= (10*rank);//经验值减去相应值
rank++; //升级
hp = 10*rank; //满血
damage = rank;//提升攻击力
}
else
break;
}
}
3)main.cpp
#include "iostream"
#include "Monster.h"
#include "Ultraman.h"
using namespace std;
int main()
{
cout<<"Start!"<<endl;
Ultraman u;
Monster m;
int chose;
int num1 = 0;
int num2 = 0;
while(1)
{
//遇到一个怪兽
m.set_rand();
num2++;
cout << "遇到第" << num2 <<"个怪兽" << endl;
while(1)
{
cout << "\t生命值\t等级\t攻击力\t经验\t钱财" << endl;
//显示超人和怪兽属性
u.display();
m.display();
cout << "\n请输入你的选择:";
cin >> chose;
switch(chose)
{
//攻击
case 1:
while(1)
{
if(u.isalive() && m.gethp())//奥特曼和怪兽都活着
{
u.attack(m); //攻击
}
else
break;
}
break;
//逃跑
case 2:
u.escape();
break;
//补血
case 3:
u.restore();
break;
case 4:
break;
default:
cout << "错误,请输入整数1~4!" << endl;
break;
}
//输入4或者奥特曼死亡或者怪兽被打死或逃跑
if((chose == 4) || (u.isalive() == 0) || (m.gethp() == 0) || (chose==2))
{
if(m.gethp() == 0)
{
num1++;
cout << "打死第" << num1 <<"个怪兽" << endl;
}
cout << "\n";
break;
}
}
if((chose == 4) || (u.isalive() == 0))
{
if(u.isalive() == 0)
cout << "奥特曼死亡" << endl;
break;
}
}
cout << "Game over!" << endl;
return 0;
}
此处只是为了说明我认识的C++应该如何编写多文件,勿喷,谢谢