定义一个“大富翁”游戏角色类CRole。
1、描述角色的私有数据成员为:
姓名(char *pName)、金钱(iCash)、存款(iSavings)、得意时口头禅(char *pGoodWords)、沮丧时口头禅(char *pBadWords)、游戏的角色数目( iRoleNum)、游戏角色平均资产(iMoney)。
2、定义相应的成员函数来设置和读取这些私有成员(游戏角色数目和平均资产只能通过计算得到,不能直接设置)。定义成员函数Speak()输出口头禅(根据资产数超过还是低于平均资产而定)。
3、定义构造函数:
(每次构造成功,显示[对象姓名+“角色进入”])、拷贝构造函数和析构函数(每次析构显示[对象姓名+“角色退出”]。
4、在main函数里用该类定义一个对象数组,包括以下5个对象信息(姓名、口头禅)。
孙小美 好的开始是成功的一半! 还给人家啦
钱夫人 你的是我的,我的还是我的! 老娘跟你没完!
沙隆巴斯 阿拉真主,我赞美你! 人生不如意十有八九 再加两个角色A,B及其口头禅(自定)。
5、通过cin依次输入三个角色的现金和存款(要求每个输入前有输入说明提示)。输入完后直接调用speak观看输出结果。输出结果必须按照资产由高到低的角色顺序输出。
代码如下:
头文件(CR.h)代码如下:
#pragma once
#include <iostream>
using namespace std;
class fund {
public:
static int iMoney;//平均资金
static int sumMoney;//总资金
friend class CRole; //友元类
static int getsumMoney( );//得到总资金
int getiMoney(int m, int i);//得到平均资产
};
class CRole {
private:
char pName[10]; //角色名
char pGoodWord[100];//好的口头禅
char pBadWord[100];//坏的口头禅
int iCash; //现金
int iSaving;//存款
static int iRoleNum;//角色人数
friend class fund; 友元类
int personmoney;//个人资产
public:
friend void setmoney(fund x,CRole &a);//设置现金,存款
friend void Speak(fund x,CRole& a);//输出
int getiRoleNum();//得到角色人数
const char *getpName();//得到角色名
int getpersonmoney();//得到个人资产
CRole(const char* name,const char *pGoodWord,const char *pBadWord);//构造函数,给角色属性赋值
~CRole();//析构函数
};
main文件如下:
#include"CR.h"
#include<string>
int CRole::iRoleNum = 0;
int fund::iMoney = 0;
int fund::sumMoney = 0;
int CRole::getiRoleNum()//得到角色人数
{
return iRoleNum;
}
const char *CRole::getpName()
{
return pName;
}
CRole::CRole(const char* name, const char* GoodWord, const char* BadWord)//初始化
{
iRoleNum++;
strcpy_s(pName,name);
strcpy_s(pGoodWord, GoodWord);
strcpy_s(pBadWord, BadWord);
cout << pName << "角色进入游戏" << endl;
}
CRole::~CRole() {
cout << pName << "角色退出" << endl;
}
void setmoney(fund x,CRole &a)
{
int x1, x2;
cout << a.pName << "的现金和存款是(输入整数,用空格隔开):"<< endl;
cin >> x1>>x2;
a.iCash = x1;
a.iSaving = x2;
a.personmoney = x1 + x2;
x.sumMoney += x1 + x2;
}
int fund::getsumMoney()
{
return sumMoney;
}
int fund::getiMoney(int m, int i) {
return iMoney=m / i;
}
int CRole::getpersonmoney( ) {
return personmoney;
}
void Speak(fund x,CRole &a) {
cout << "角色姓名:" << a.getpName() << " 角色资金:" << a.getpersonmoney();
if (a.getpersonmoney() < x.getiMoney(x.getsumMoney(),a.getiRoleNum()))
{
cout<<" 口头禅:"<<a.pBadWord<<endl;
}
else
cout << " 口头禅:"<<a.pGoodWord << endl;
}
void main() {
CRole *s[6] = {NULL};
s[0] = new CRole("孙小美", "好的开始是成功的一半","还给人家啦");
s[1] = new CRole("钱夫人", "你的是我的,我的还是我的", "老娘跟你没完");
s[2] = new CRole("沙隆巴斯", "阿拉真主,我赞美你!", "人生不如意十有八九");
s[3] = new CRole("张三", "我爱学习", "学习好难,还是玩游戏吧");
s[4] = new CRole("李四", "我爱运动", "我还是躺着吧");
cout <<"角色人数:"<< s[4]->getiRoleNum()<<endl;
fund fd;
for(int i = 0;i<s[0]->getiRoleNum();i++)
{
setmoney(fd,*s[i]);
}
cout << "总资金为:" << fd.getsumMoney( ) << endl;
cout << "角色平均资产是:" << fd.getiMoney(fd.getsumMoney(), s[0]->getiRoleNum()) << endl;
//重新排序
for(int i=0;i<5;i++)
for (int j = 0; j <5 - i; j++)
{
if (s[j]->getpersonmoney()<= s[j + 1]->getpersonmoney())
{
s[5] = s[j + 1];
s[j + 1] = s[j];
s[j] = s[5];
}
}
for (int i = 0; i < s[0]->getiRoleNum(); i++)
{
Speak(fd,*s[i]);
}
for (int i = 0; i < s[0]->getiRoleNum(); i++)
{
char tmp;
cout<<s[i]->getpName()<<"角色要退出吗?(y/x)"<<endl;
cin >> tmp;
if (tmp == 'y')
{
s[i]->~CRole();
}
else
{
cout << s[i]->getpName() << "角色待在游戏里,不退出" << endl;
continue;
}
}
}
运行截图如下:
代码仅供参考