关于串行化动态生成对象的问题

vitingman 2004-11-19 09:16:44
我现在有很多子类(例如CLine,CRect,CCurve)都从CGraphic类派生,每一个类我都作了串行化的重载,但是有一件事情我很迷茫,我生命了一个CGraphic指针以后,如何让这个指针从文件中自动知道自己要生成哪个对象,然后去调用相应的串行化函数?

一般的做法我可以在每一个类里面都放进一个标志位表示这个类的类型,然后东过渡出来的类型来生成对象并调用相应的串行读入函数。就象下面那样
ar>>type;
CGraphic* p = CreageGraphic(type);
p->Serialize(ar);
...............
但是如果这样做的话,我用一般的文件读写就可以完全搞定,那要串行化做什么?

串行化到底都保存了什么呢?他和标准的C++文件IO有什么区别呢?
...全文
97 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
handwolf 2004-11-19
  • 打赏
  • 举报
回复
是的,已经不错了,因为new一个基类,就可以得到继承类!
vitingman 2004-11-19
  • 打赏
  • 举报
回复
我先晕一下,必须CBase *pBase = new CBase;然后就可以根据文件的信息动态的调用派生类的串行化函数?
handwolf 2004-11-19
  • 打赏
  • 举报
回复
楼上的补充得有道理!
谢谢
快乐鹦鹉 2004-11-19
  • 打赏
  • 举报
回复
CBase* pBase;
 pBase->Serialize(ar);//打开CInherit1
pBase->Serialize(ar);//打开CInherit2
这是错误的。不申请空间不可能调用函数。运行态就报错。
必须CBase *pBase = new CBase;
pBase->Serialize(ar);//打开CInherit1
pBase->Serialize(ar);//打开CInherit2
handwolf 2004-11-19
  • 打赏
  • 举报
回复
这个pBase指针不用申请空间就可以拿到文件里面的数据么?
是的!

申请空间是串行化自动做的事情么?
是的,所以叫动态创建!
vitingman 2004-11-19
  • 打赏
  • 举报
回复
to; handwolf(初学者)
这个pBase指针不用申请空间就可以拿到文件里面的数据么?申请空间是串行化自动做的事情么?
to; happyparrot(快乐鹦鹉)
同感同感。

还请大家多多指教啊。
handwolf 2004-11-19
  • 打赏
  • 举报
回复
1) 动态创建:
Class CBase
{
};

Class CInherit1 : public CBase
{
};

Class CInherit2 : public CBase
{
};


保存:
 CBase* pBase = new CInherit1;
 p->Serialize(ar);
pBase = new CInherit2;
p->Serialize(ar);

打开:
 CBase* pBase;
 pBase->Serialize(ar);//打开CInherit1
pBase->Serialize(ar);//打开CInherit2

2)二进制保存,空间小!
快乐鹦鹉 2004-11-19
  • 打赏
  • 举报
回复
呵呵,我做的序列化和你的一样,也是用这种方式的。
至于说文件读写也可以搞定,还不至于吧。序列化比文件读写方便多了。
vitingman 2004-11-19
  • 打赏
  • 举报
回复
我现在对串行化知之甚少,希望哪位能详细地介绍一下,谢谢!
南风1 2004-11-19
  • 打赏
  • 举报
回复
楼上的如果我在文档的Serialize函数中这样写可以吗
handwolf 2004-11-19
  • 打赏
  • 举报
回复
不可以,
没有定义>>运算符函数
南风1 2004-11-19
  • 打赏
  • 举报
回复
happyparrot(快乐鹦鹉)
假如我这样写
CBase* pBase;
ar >> pBase;可以吗?没有调用函数也没有分配空间
vitingman 2004-11-19
  • 打赏
  • 举报
回复
那么我new哪个基类呢,是CObject 还是CGraphic ? 我的那个CGraphic可是一个虚基类啊。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧