- 1、本文档共2页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二RTTI,动态创建,序列化.doc
MFC原理系列报告之:运行期类型识别
一 总论
刚学习完MFC,一时心血来潮,分析下MFC的几个关键技术,算是对学习的总结。由于本人还是个初学者,能力有限,语言组织欠妥,肯定有不足之处,欢迎批评斧正。
有以下几个部分内容:
1.RTTI(运行期类型识别)
2.动态创建
3.序列化的实现
4.程序的产生,运行和结束 ,以单文档框架程序为例
5.单文档框架程序/类型之间的关系
6.MFC消息机制的流转
7.实现自己的SPY ++
二: RTTI, 动态创建,序列化
RTTI是动态创建的基础,序列化同时用到动态创建和RTTI,所以RTTI 是MFC的基石。三者的关系很紧密。.
动态创建可以简单理解为,通过字符串创建对象。比如你封装了一个类CLine,如何仅
仅通过字符串“CLine”创建来CLine类的对象。
序列化是指从持久存储介质中读出或写入一个对象的过程。
举个例子:在一个CAD系统里,用户画了一些线条呀,矩形??等。如何将当前所有图形保存到文件中,下次打开文件,然后正确读取并显示出来。
让我们尝试分析下,假设有两个类CLine, CRectangle分别负责绘制线条和矩形。
CLine里保存线条的起始坐标点。
Crectangle保存矩形的左上角坐标点,以及右下角坐标点。
用户每画一个线条,则创建一个CLine对象,矩形也是如此。
当用户保存线条到文件时,需要保存哪些内容呢?肯定要有CLine的类型信息,类信息至少有类的名字。如果不保存,读取图形文件时,无法创建一个CLine对象,也就不能再正确显示出来。读出对象时,根据字符串“CLine”创建一个CLine对象,即动态创建。
这里保存和读取对象的过程就是序列化,很显然序列化需要动态创建的支持,但是二者共同基础却是RTTI。
三. RTTI详解
RTTI (Run_Time Type Identification),即运行期类型识别,是MFC动态创建的基础,可以对类型进行管理,对类型之间的关系,对象的类型进行识别和检查。
RuntimeClass的结构体,所有具有RTTI和动态创建能力的类都需要添加一个CRuntimeClass静态成员,然后维护一个CRuntimeClass对象的链表,这样就可以保存这些类的相关信息,并在运行时使用相关信息。
MFC 里CRuntimeClass结构的的重要成员:
LPCSTR m_lpszClassName; //类名字符串
int m_nObjectSize; //对象大小
UINT m_wSchema; //被加载类的版本信息
CObject* (PASCAL* m_pfnCreateObject)(); //指向动态创建对象函数的指针
CRuntimeClass* m_pBaseClass; //指向类的成员函数_GetBaseClass,返回基类CRuntimeClass
实现关键:
1.在主函数前,把每个支持RTTI的类都加一个该类型信息结构体对象赋值,通过静态成员变量实现的。
2.在结构体对象构造过程中,完成类型链表的构建,
3.通过IsKindOf,IsDerverFrom处理,遍历列表找到对应的类型。
本文手工模拟实现了一个运行期类型识别程序,
其中一份是宏定义实现的。手工模拟的CMyRunTimeClass
(为简化,只保存了最基本的类信息,参考附件)
链表完成构建后,对类型的查找,判断就很简单了。
以下是关键函数CMyRunTimeClass::IsDerivedFrom函数的实现:
//判断当前类是否从pBaseClass派生
bool CMyRunTimeClass::IsDerivedFrom(
const CMyRunTimeClass* pBaseClass)
{
CMyRunTimeClass *pCurrent = this;
while (pCurrent != NULL)
{
if (pCurrent == pBaseClass)
{ return true; }
//向上找父类的 类型信息结构体对象
pCurrent = pCurrent-m_pBaseClass;
}
return false;
}
您可能关注的文档
- 中国移动通信客户服务协议.doc(45k).doc
- 中国肉类消费的全景图和大趋势-中国畜牧业信息网.doc
- 中国药科大学2003年级2005-2006学年第二学期.doc
- 中国风电并网研究.ppt
- 中央政府与一般地方政府的关系-山东大学课程中心.ppt
- 中央电大《计算机应用基础(本)》课程教学大纲.doc
- 中央财经大学与国境外机构签署合作协议的通知-中央财经大学国际.doc
- 中小学教师道德学习材料-合肥五十中.ppt
- 中州技术学院电脑软硬体规格采购要点(草案)-中州科技大学.doc
- 中心简报2015【第二期】-首钢人事服务中心.doc
- 分析let s单元56ago2卷纸zheng unit56.pdf
- 塑胶材料其它分类原料pa9t 12.pdf
- md16x16数字媒体切换器设备.pdf
- 者参考项目发起人学科类型单位序列承包商修订页代码顺序典型.pdf
- 届世界天然气大会阿姆斯特丹2006add10288.pdf
- 期测试记录表每周weekly g1g6 journeys tests level 6 lesson26.pdf
- modernize-whitepaper现代化您应用程序白皮书.pdf
- anybackup产品典型案例分析.pdf
- 约克金融工程课程tfeslide32.pdf
- 广州市妇女儿童医疗中心历份教学药历01tjy.pdf
最近下载
- 造林工程 安全管理体系及措施 文明施工的方案及保证措施.docx
- 数学建模论文.docx VIP
- 全国托育大赛中职组(教师)备赛复习试题附答案.doc
- 高中音乐_贝多芬教学设计学情分析教材分析课后反思.doc
- 2024年西安铁路职业技术学院单招职业适应性测试题库及答案解析.docx VIP
- 2024年石家庄铁路职业技术学院单招职业适应性测试题库及答案解析.docx VIP
- 人教版高中数学目录超详细.pdf
- 专业课备考资料137、幼儿教师保教知识与能力.pdf
- 2024年郑州软件职业技术学院单招职业适应性测试题库及答案解析.docx VIP
- 2024年郑州电力职业技术学院单招职业适应性测试题库及答案解析.docx VIP
文档评论(0)