做管理系统的时候需要将进行文件读写,其中涉及到自定义的类的时候就比较麻烦了。尤其是我的类中有string 的类型,不能直接用输入输出流或者强制类型转换进行读写。然而网上各种序列化的资料也比较乱,很多都只写了一部分。因此在自己完成之后再系统地归纳一下,希望对大家有帮助。我是在vs2017中测试的。
进入正题。对于你希望用序列化进行文件读写的类,字符类型最好不要用string而是用CString(不过我就是用string的,会更麻烦一点,下文会提到)。
在你的类中加入下面的代码。
//.h文件中
class yourclass {
// 序列化声明宏
DECLARE_SERIAL(StudentHealth);//需要添加的部分
friend CArchive& AFXAPI operator<<(CArchive& ar, 你的类 &_tstruct);//需要添加的部分
friend CArchive& AFXAPI operator>>(CArchive& ar, 你的类 &s);//需要添加的部分
public:
virtual void Serialize(CArchive &ar);//需要添加的部分
void function() { ; }//你的函数等
private:
int x;//你的数据成员等等
};
在你的类的实现文件中加入下面的代码。
//.cpp文件中
#include"你的类.h"
// 序列化实现宏
IMPLEMENT_SERIAL(你的类, CObject, 1);//这个要放到.cpp中
void 你的类::Serialize(CArchive &ar) { // 如果父类成员需要序列化时,首先调用父类相关函数
CObject::Serialize(ar);
//假设有数据成员CString a, b, c;
if (a
MFC自定义类序列化与文件读写教程

在VS2017中,管理系统文件读写时,若涉及自定义类,尤其是包含string类型的类,直接使用输入输出流不便操作。本文详细介绍了如何在MFC中使用序列化进行文件读写,包括使用CString替代string,以及处理无法直接通过流操作符读写的string数据的特殊方法。文章最后提到,对于复杂读写操作,可采用内嵌类和转换方法,以保持代码封装性。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



