面向对象程序设计(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;
}
posted @ 2022-03-26 19:36  虐心i  阅读(91)  评论(0编辑  收藏  举报