- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++(STL)实现的修改游戏存档文件的2个相关类.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了。他只是比对方更珍惜这份感情。C++(STL)实现的修改游戏存档文件的2个相关类 收藏
//本类可自动检查游戏存档中的数值
//属于模板类
//T代表要寻找数据的类型//如金钱,生命等属于整型
//但不排除以后要查找其他类型的数据。为了可扩充性,使用了模板。
template typename T
class CheckBinaryFile{
public:
typedef fstream::off_type AddressType;//要找的数据在文件中的地址类型
CheckBinaryFile();//构造函数
void Run();
private:
static const int MaxByte=sizeof(T);//要查找的数据的类型所占的字节数
const int CharSize;
EInputStream CIN;//一个加强输入流(第三方类)
string FileName;//文件名称
T OldData;//输入的要查找的数据
int ByteNumber;//要查找的数据所占的字节数
//mutable关键字是const的反义作用,容易变动的变量经常使用它
mutable bool InputIsOk;
//用于读的文件对象
mutable ifstream BinaryFile;
mutable listAddressType AddressList;
//操作方法
void Input();
int Check() const;
void SaveAddressToFile(ostream) const;//最后的const作用是防止修改本类对象的状态,即除mutable关键字标识的变量外其他都不可在此函数内做修改
void AutoModifySave(const T) const;//在函数内防止修改T类型的参数
};
template typename T
//如果是static声明的静态变量在类体内做了声明,则在类外必须再做定义,而且只能被声明一次
const int CheckBinaryFileT::MaxByte;
//源文件
////////////////////////////////////////////////////////////////////////////////////
//构造函数
template typename T
CheckBinaryFileT::CheckBinaryFile():CharSize(char),CIN(cin){
InputIsOk=true;
Input();
//CharSize 为sizeof(char),把cin 绑定到CIN。由于CharSize是常量,必须在构造函数的初始化列表中设定。
}
//私有函数:输入成员函数
template typename T
void CheckBinaryFileT::Input()
{
//打开指定的输入文件名的二进制文件
coutBinary Filename:\t;
cinFileName;
BinaryFile.open(FileName.c_str(),ios::in|ios::binary);
if(!BinaryFile)
{
InputIsOk=false;
cerropen file failed!\n;
return;
}
//输入要查找的数据
coutthe Integer you want to search:\t;
CINOldData;
//要找的数据的所占的数据位(字节数)
coutbyte number:(1--CheckBinaryFileT::MaxByte):\t;
CINByteNumber;
//字节数是否溢出的检查
if(ByteNumber1||ByteNumberCheckBinaryFileT::MaxByte)
{
ByteNumber=Chec
文档评论(0)