C++ 实现一个简单的类

2025-01-31 10:32:30
推荐回答(3个)
回答1:

我重新帮你写了个,你看看:

#include
#include
#include
#include
#include
#include
#include
#include

class players
{
struct PlayerInfos
{
PlayerInfos();
std::string name;
int level;
double exp;
}infos;

public:
typedef std::map > value_type;
typedef std::size_t size_type;
void AddPlayer();
void SetInfos();
void GetInfos();
void GetTotalInfo();
size_type Amount()const;

private:
value_type data;
};

players::PlayerInfos::PlayerInfos()
: name(""), level(std::rand() % 100 + 1), exp(pow(level * 448.0, 2))
{
}

void players::AddPlayer()
{
std::cin.exceptions(std::ios_base::failbit | std::ios_base::badbit);
std::cout << "请输入新玩家的ID: ";

size_type id;
std::cin >> id;

if(data.find(id) != data.end())
{
std::cout << "该ID已存在!\n";
return;
}

std::cout << "请输入新玩家的姓名: ";
PlayerInfos Pinfos;
std::cin >> Pinfos.name;
std::cout << '\n';
this->data.insert(value_type::value_type(id, Pinfos));
}

void players::SetInfos()
{
std::cin.exceptions(std::ios_base::failbit | std::ios_base::badbit);
std::cout << "请输入要设置的玩家id: ";
size_type id;
std::cin >> id;
std::cin.clear();
if(data.find(id) == data.end())
{
std::cout << "玩家不存在!\n\n";
return;
}

std::cout << "请输入ID为: " << id << " 的玩家的姓名: ";
std::cin >> data[id].name;
std::cout << "请输入ID为: " << id << " 的玩家的等级: ";
std::cin >> data[id].level;
std::cout << "请输入ID为: " << id << " 的玩家的经验: ";
std::cin >> data[id].exp;
std::cout << "设置完毕" << std::endl;
}

void players::GetInfos()
{
std::cin.exceptions(std::ios_base::failbit | std::ios_base::badbit);
std::cout << "请输入要检索的玩家ID: ";
std::cin.clear();
size_type id;
std::cin >> id;
std::cin.clear();
if(data.find(id) == data.end())
{
std::cout << "玩家不存在!\n\n";
return;
}

std::cout << "\nID为: " << id << " 的玩家的姓名: ";
std::cout << data[id].name << '\n';
std::cout << "ID为: " << id << " 的玩家的等级: ";
std::cout << data[id].level << '\n';
std::cout << "ID为: " << id << " 的玩家的经验: ";
std::cout << data[id].exp << '\n';
std::cout << "检索完毕\n" << std::endl;
}

inline players::size_type players::Amount()const
{
return data.size();
}

void players::GetTotalInfo()
{
for(value_type::iterator it = data.begin(); it != data.end(); ++it)
{
std::cout << "ID: " << it->first << '\n';
std::cout << "姓名: " << it->second.name << '\n';
std::cout << "等级: " << it->second.level << '\n';
std::cout << "经验: " << it->second.exp << '\n' << std::endl;
}
}

int main()
{
using namespace std;
srand(unsigned(time(0)));

players ps;

for(int i = 0; i < 5; ++i)
ps.AddPlayer();

cout << endl;

for(int i = 0; i < 5; ++i)
ps.GetInfos();

ps.GetTotalInfo();
}

演示:

请输入新玩家的ID: 3
请输入新玩家的姓名: shj

请输入新玩家的ID: 6
请输入新玩家的姓名: jimmyi

请输入新玩家的ID: 1
请输入新玩家的姓名: spring

请输入新玩家的ID: 121
请输入新玩家的姓名: bird

请输入新玩家的ID: 99
请输入新玩家的姓名: boss

请输入要检索的玩家ID: 3

ID为: 3 的玩家的姓名: shj
ID为: 3 的玩家的等级: 42
ID为: 3 的玩家的经验: 3.54042e+008
检索完毕

请输入要检索的玩家ID: 1

ID为: 1 的玩家的姓名: spring
ID为: 1 的玩家的等级: 71
ID为: 1 的玩家的经验: 1.01175e+009
检索完毕

请输入要检索的玩家ID: 121

ID为: 121 的玩家的姓名: bird
ID为: 121 的玩家的等级: 57
ID为: 121 的玩家的经验: 6.52087e+008
检索完毕

请输入要检索的玩家ID: 99

ID为: 99 的玩家的姓名: boss
ID为: 99 的玩家的等级: 53
ID为: 99 的玩家的经验: 5.63778e+008
检索完毕

请输入要检索的玩家ID: 8
玩家不存在!

ID: 121
姓名: bird
等级: 57
经验: 6.52087e+008

ID: 99
姓名: boss
等级: 53
经验: 5.63778e+008

ID: 6
姓名: jimmyi
等级: 47
经验: 4.43355e+008

ID: 3
姓名: shj
等级: 42
经验: 3.54042e+008

ID: 1
姓名: spring
等级: 71
经验: 1.01175e+009

回答2:

已级给你实现了,我在具体修正了的地方加了注释:
#include "stdafx.h"
#include "stdafx.h"
#include
#include
#include

using namespace std;

class Player{
private:
char PlayerID[20];
char PlayerName[10];
int PlayerLevel;
int Experience;
public:
Player();
~Player();
void GetPlayerInfo();
void PutPlayerinfo(Player *ptr);
int search(Player *ptr, char *ID);
void sort(Player *ptr);
};

Player::Player()//构造函数得要
{

}

Player::~Player()//析造函数也得要
{

}
void Player::GetPlayerInfo(){
int cont=0;
cout<<"\n输入玩家的ID:"< cin>>PlayerID;
cout<<"\n输入玩家的姓名:"< cin>>PlayerName;
PlayerLevel=rand()%100; //据题意要加个0-100的范围
Experience=cont++;
}

void Player::PutPlayerinfo(Player *ptr){
int cont=0;
while( cont<5 )
{
cout<<" \n玩家ID:"< cout<<" 玩家姓名:"< cout<<" 玩家等级为:"< cout<<" 玩家经验值为:"< cont++;
}
}

int Player::search(Player *ptr,char *ID){ //这个函数前你忘加Player::
for ( int i=0;i<5;i++ )
{
if ( !strcmp(ptr[i].PlayerID,ID) ) //两个字符串不能直接比较得用函数,关于这个函数请看MSDN
{
cout<<"你要查找的游戏玩家的ID是:"< cout<<"你要查找的游戏玩家的姓名是:"< cout<<"你要查找的游戏玩家的等级是:"< cout<<"你要查找的游戏玩家经验值为:"< break;
}
ptr++;
}
return 0;
}

void Player::sort(Player *ptr){ //这个函数前你忘加Player::
Player Temp;
int i,j;
for (i=0;i<5;i++ ) //一个标准的冒泡排序
{
for (j=i+1;j<5;j++ )
if (ptr[i].PlayerLevel Temp.PlayerLevel=ptr[i].PlayerLevel;
Temp.Experience=ptr[i].Experience;
strcpy(Temp.PlayerID,ptr[i].PlayerID);
strcpy(Temp.PlayerName,ptr[i].PlayerName);

ptr[i].PlayerLevel=ptr[j].PlayerLevel;
ptr[i].Experience=ptr[j].Experience;
strcpy(ptr[i].PlayerID,ptr[j].PlayerID);
strcpy(ptr[i].PlayerName,ptr[j].PlayerName);

ptr[j].PlayerLevel=Temp.PlayerLevel;
ptr[j].Experience=Temp.Experience;
strcpy(ptr[j].PlayerID,Temp.PlayerID);
strcpy(ptr[j].PlayerName,Temp.PlayerName);
}
}
}

int main()
{
Player P[5];
int i=0;
while ( i<5 )
{
P[i].GetPlayerInfo();
i=i+1;
}
cout<<"请输入要找的玩家ID:"< char ID[20]; //这里应该是一个字符串而不是一个指针,否则就出大事了!
cin>>ID;
Player Test;
Test.search( P,ID );
Test.PutPlayerinfo( P ); //参数是指针所以不要用P[0],一定要这么定的话也要写成&P[0]
Test.sort( P );
Test.PutPlayerinfo( P );

system("PAUSE");
return 0;
}

回答3:

因为类的私有成员变量不能在类的外部访问,你把那些私有成员变量通过成员函数取出来,或者定义为public的。