MFC编程实例,mfc编程基础,基于MFC实现类的序列化详解

MFC编程实例,mfc编程基础,基于MFC实现类的序列化详解

序列化是将程序中的对象以二进制格式存储到存储设备(如文本/数据库等)中。)随意实现“永生”或“流动”。本文将详细告诉你如何基于MFC实现类序列化,有需要的可以参考一下。

序列化是将程序中的对象以二进制格式存储在存储设备(如文本/数据库等)中。)随意实现“永生”或“流动”。

首先,定义一个要序列化的类people,其属性为年龄、体重和身高。

#杂注一次

阶级人民{

公共:

int age

int重量;

int高度;

};

定义后,将这个类添加到项目名称view.h的类中作为它的属性,它是一个指针类型。

序列化要访问的类。

1.序列化类必须派生自CObject或CObject的派生类。

#杂注一次

//导入#includeafx.h头文件,以便该类可以继承CObject。

#includeafx.h

类人员:公共对象{

公共:

int age

int重量;

int高度;

};

2.为此类定义一个不带参数的构造函数

3.在类声明中使用DECLARE_SERIAL(类名)宏

#杂注一次

#includeafx.h

类人员:公共对象{

公共:

DECLARE_SERIAL(人);

人();

公共:

int age

int重量;

int高度;

};

4.在类的实现中添加IMPLEMENT_SERIAL(类名、父类名、版本号)宏

#包含“pch.h”

#包含“people.h”

//第一个参数是类名,第二个参数是父类名,第三个参数是版本号(一般版本号从1开始)

IMPLEMENT_SERIAL(people,CObject,1);

人民:人民()

{

}

5.在类的实现中,通过类向导(或手写)添加序列化虚函数

MFC提供了CArchive类来将对象数据保存到永久设备,如磁盘文件。当应用程序重启时,CArchive类可以帮助我们从磁盘文件中读取这些数据,然后在内存中重建相应的对象;这就使得我们的对象数据永远存在,这个过程叫做序列化(或者序列化)。

void people:Serialize(存档ar)

{

如果(ar。IsStoring())

{ //存储代码

}

其他

{ //加载代码

}

}

类CArchive重载输入和输出运算符,这是为了在访问时使用运算符重载。

void people:Serialize(存档ar)

{

如果(ar。IsStoring())

{ //存储代码

//存储数据

年龄体重身高;

}

其他

{ //加载代码

//读取数据

年龄体重身高;

}

}

如果类的属性中有一个自定义类型数组,例如下面的,其中CPoint是一个MFC类型对象。

#杂注一次

#includeafx.h

类人员:公共对象{

公共:

CArrayCPointm _ point

};

这可以在序列化集合访问时完成。

void people:Serialize(存档ar)

{

如果(ar。IsStoring())

{ //存储代码

//存储数据

年龄体重身高;

}

其他

{ //加载代码

//读取数据

年龄体重身高;

}

/*使用数组直接调用此方法,因为数组已经实现了此方法。存储在数组中的元素是CPoint,CPoint。

该省还支持序列化*/

m点。序列化(ar);

}

程序启动时加载序列化。

在Doc.cpp文件中找到序列化接口函数

void cdraw 3 doc:Serialize(car chive ar)

{

如果(ar。IsStoring())

{

//TODO:在此添加存储代码

}

其他

{

//TODO:在此添加加载代码

}

}

从视图类people*中获取要序列化的数据

void cdraw 3 doc:Serialize(car chive ar)

{

//取出链表中第一个视图的位置

POSITION pos=GetFirstViewPosition();

//通过位置获取此视图

cdraw 3 view * pView=(cdraw 3 view *)get next view(pos);

如果(ar。IsStoring())

{

//存储数据

ar pView-人类;

}

其他

{

//获取数据

ar pView-人类;

}

}

这样我们每次保存数据都可以用二进制序列化保存,每次打开都可以打开上次保存的内容。

如果people*是一个数组,比如这样

那么我们在使用序列化访问的时候,首先要访问数组的长度,回收数组的内容。

void cdraw 3 doc:Serialize(car chive ar)

{

//取出链表中第一个视图的位置

POSITION pos=GetFirstViewPosition();

//通过位置获取此视图

cdraw 3 view * pView=(cdraw 3 view *)get next view(pos);

//获取数组长度

int cnt=pView-human。GetSize();

如果(ar。IsStoring())

{

//存储数据

ar cnt

for(int I=0;我cnti ) {

//循环存储数组

ar视图-人类。GetAt(I);

}

}

其他

{

//取长度

ar cnt

for(int I=0;我cnti) {

//依次获取数据,并将其添加到数组中

人* p;

ar p;

pView-人类。添加(p);

}

}

}

到目前为止,本文对基于MFC的类的序列化的详细解释已经介绍到这里了。有关MFC类序列化的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: