面向对象程序设计(C++): 实验4 静态成员
@[TOC]
实验要求
设计一个玩家类Gamer,包含以下成员:
数据成员:账号id,昵称name,得分score,金币money,玩家人数count;
函数成员:设置玩家信息,输出玩家信息;充值金币;消耗金币;统计玩家总人数,所有玩家得分平均值,构造函数,析构函数;
请编程序,实现玩家金币充值、花费功能,并且计算出游戏的平均得分。要求用静态数据成员和静态成员函数,函数功能实现请自行补充,绘制类图。
实验分析
本次实验侧重点是静态成员,在要求创建的成员中,我们能用到静态成员
有玩家人数
和所有玩家得分平均值
实验中遇到的坑
错误提示:
error LNK2019: 无法解析的外部符号 "private: static int CGamer::m_count" (?m_count@CGamer@@0HA),函数 "public: __cdecl CGamer::CGamer(int,char *)" (??0CGamer@@QEAA@HPEAD@Z) 中引用了该符号
- 原因分析:用到了静态数据成员,还没初始化造成的
- 解决方法:
尝试创建时初始化,失败
尝试类外初始化,成功
错误提示:
error C2724: “CGamer::getcount”:“static”不应在文件范围内定义的成员函数上使用
原因分析:static只需要加在类定义里,类定义外面的函数定义前不能写static
解决方法:类外函数删掉static
实验源码
#include<iostream>
using namespace std;
class CGamer
{
int m_id,m_money,m_score;
static int m_count,m_averagescore;
char *m_name;
public:
CGamer(int id,char* name);
static int getCount();
static int getAveragescore();
void setPlayer(int id,char* name);
void showPlayer();
void chaegeMoney(unsigned int money);
void useMoney(unsigned int money);
~CGamer(){delete []m_name;};
};
CGamer::CGamer(int id=0,char* name="default")
{
m_id = id;
m_score=0;
m_money=0;
m_count++;
m_name=name;
}
int CGamer::m_count = 0;
int CGamer::m_averagescore = 0;
int CGamer::getCount()
{
return m_count;
}
int CGamer::getAveragescore()
{
return m_averagescore;
}
void CGamer::setPlayer(int id,char* name)
{
m_id = id;
m_name = name;
}
void CGamer::showPlayer()
{
cout << "id:[" << m_id << "]\n" << "name:[" << m_name << "]\n"
<< "score:[" << m_score << "]\n" << "money:[" << m_money << "]\n"
<< "cout:[" << m_count << "]\n" << "averagescore:[" << m_averagescore << "]" << endl;
}
void CGamer::chaegeMoney(unsigned int money)
{
m_money += money;
}
void CGamer::useMoney(unsigned int money)
{
m_money -= money;
m_score=money;//积分获取方式,累计消费
m_averagescore+=(m_score/m_count);//所有玩家得分平均值
}
int main()
{
CGamer _A,_B;
_A.setPlayer(4,"course04");
_A.chaegeMoney(100);
_A.useMoney(90);
_A.showPlayer();
_B.setPlayer(44,"course044");
_B.chaegeMoney(444);
_B.useMoney(111);
_B.showPlayer();
system("pause");
return 0;
}