MFC的序列化(Serialization)

1、定义

序列化在面向对象的程序设计中出现的,它基于对象是可以连续的思想,在程序退出或者启动的时候,可以把对象顺序的存储在磁盘或者从磁盘读出,存储和读出对象的过程叫做序列化。

2、使用

要实现一个能够序列化的类,必须要经过一下几步

  • 1.这个类必须间接火直接地由CObject派生而来
  • 2.定义一个不带参数的构造函数
  • 3.在头文件中,必须有如下声明:DECLARE_SERIAL( Your name of class)
  • 4.在源文件中开头有如下声明:IMPLEMENT_SERIAL (Your name of class,CObject,1)其中的第三个参数代表版本号
  • 5.必须重载基类中的序列化函数Serialize

经过以上五步,一个带有存储功能的类就诞生了

3、实例

下面举一个简单的例子,假如有类CArwen,实例化一个对象,然后序列化该对象.最后反序列化,把保存的值再读出来初始化给一个对象.

头文件

#pragma once
#include "pch.h"

class CArwen : public CObject
{
	DECLARE_SERIAL(CArwen)

public:

	virtual void Serialize(CArchive& ar);

	int age;

	CString name;

};

cpp文件

#include "pch.h"
#include "CArwen.h"

//cpp文件

IMPLEMENT_SERIAL(CArwen, CObject, 1) //1是版本号,可以随便指定一个数值


void CArwen::Serialize(CArchive& ar)

{
	if (ar.IsStoring()) { //序列化,保存信息

	ar << age;

		ar << name;

	}
	else //反序列化,读取信息

	{

		ar >> age;

		ar >> name;

	}

}
//写入
void CMFCApplication1Dlg::OnBnClickedOk()
{
	CArwen arwen;

	arwen.age = 24;

	arwen.name = _T("weiwenhp");  

		CFile fi;

	fi.Open(filePath, CFile::modeCreate | CFile::modeWrite); //如果文件不存在则创建一个,否则只是往文件写数据
CArchive ar(&fi, CArchive::store);

	arwen.Serialize(ar);   //序列化对象

	ar.Close();

	fi.Close();

}

//读取

void CMFCApplication1Dlg::OnBnClickedCancel()
{
	CArwen arwen;

	CFile fi;

	fi.Open(filePath, CFile::modeRead);

	CArchive ar(&fi, CArchive::load);

	arwen.Serialize(ar); //反序列化对象
	ar.Close();

	fi.Close();


}


 参考:

https://blog.csdn.net/weiwenhp/article/details/8640743?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

 

你可能感兴趣的:(MFC)