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

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC(Microsoft Foundation Classes)是微软提供的一套用于开发Windows桌面应用程序的C++类库。在MFC中,序列化Serialization)是指将对象的状态转换为可以存储或传输的格式,而反序列化(Deserialization)则是将存储或传输的数据恢复为对象的状态。 MFC提供了一些类和宏来支持序列化和反序列化操作,主要涉及以下几个类: 1. CObject类:所有支持序列化MFC类都继承自CObject类。它提供了一些虚拟函数,如Serialize用于实现对象的序列化和反序列化操作。 2. CArchive类:用于创建和操作存储或传输数据的存档文件。CArchive类提供了Serialize函数,用于将对象的状态写入存档文件或从存档文件中读取对象的状态。 3. CFile类:用于对文件进行读写操作。它提供了Open、Read、Write等函数来操作文件。CArchive类可以使用CFile类来读写数据。 下面是一个简单的示例代码,演示了如何在MFC中进行序列化和反序列化操作: ```cpp // 假设有一个自定义的类MyData,需要支持序列化和反序列化 class MyData : public CObject { public: int m_value; // 实现Serialize函数来进行对象的序列化和反序列化操作 void Serialize(CArchive& ar) { if (ar.IsStoring()) // 写入数据 ar << m_value; else // 读取数据 ar >> m_value; } }; // 序列化操作 void SerializeData() { CFile file(_T("data.dat"), CFile::modeCreate | CFile::modeWrite); CArchive ar(&file, CArchive::store); MyData data; data.m_value = 42; data.Serialize(ar); // 将对象的状态写入存档文件 ar.Close(); file.Close(); } // 反序列化操作 void DeserializeData() { CFile file(_T("data.dat"), CFile::modeRead); CArchive ar(&file, CArchive::load); MyData data; data.Serialize(ar); // 从存档文件中读取对象的状态 ar.Close(); file.Close(); // 使用反序列化后的对象... int value = data.m_value; } ``` 在上述示例中,Serialize函数根据ar对象的状态进行读写操作,将m_value成员变量的值进行序列化和反序列化。通过创建CFile和CArchive对象,可以实现对存档文件的读写操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值