- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CObject类的特性/CObject?编辑
下面,对三种特性分别描述,并说明程序员在派生类中支持这些特性的方法。
对运行时类信息的支持
该特性用于在运行时确定一个对象是否属于一特定类(是该类的实例),或者从一个特定类派生来的。CObject提供IsKindOf函数来实现这个功能。
从CObject派生的类要具有这样的特性,需要:
● 定义该类时,在类说明中使用DECLARE_DYNAMIC(CLASSNMAE)宏;
● 在类的实现文件中使用IMPLEMENT_DYNAMIC(CLASSNAME,BASECLASS)宏。
对动态创建的支持
前面提到了动态创建的概念,就是运行时创建指定类的实例。在MFC中大量使用,如前所述框架窗口对象、视对象,还有文档对象都需要由文档模板类(CDocTemplate)对象来动态的创建。
从CObject派生的类要具有动态创建的功能,需要:
● 定义该类时,在类说明中使用DECLARE_DYNCREATE(CLASSNMAE)宏;
● 定义一个不带参数的构造函数(默认构造函数);
● 在类的实现文件中使用IMPLEMENT_DYNCREATE(CLASSNAME,BASECLASS)宏;
● 使用时先通过宏RUNTIME_CLASS得到类的RunTime信息,然后使用CRuntimeClass的成员函数CreateObject创建一个该类的实例。
例如:
CRuntimeClass* pRuntimeClass = RUNTIME_CLASS(CNname)
//CName必须有一个缺省构造函数
CObject* pObject = pRuntimeClass-CreateObject();
//用IsKindOf检测是否是CName类的实例
Assert( pObject-IsKindOf(RUNTIME_CLASS(CName));
对序列化的支持
“序列化”就是把对象内容存入一个文件或从一个文件中读取对象内容的过程。从CObject派生的类要具有序列化的功能,需要:
● 定义该类时,在类说明中使用DECLARE_SERIAL(CLASSNMAE)宏;
● 定义一个不带参数的构造函数(默认构造函数);
● 在类的实现文件中使用IMPLEMENT_SERIAL(CLASSNAME,BASECLASS)宏;
● 复盖Serialize成员函数。(如果直接调用Serialize函数进行序列化读写,可以省略前面三步。)
对运行时类信息的支持、动态创建的支持、串行化的支持层(不包括直接调用Serailize实现序列化),这三种功能的层次依次升高。如果对后面的功能支持,必定对前面的功能支持。支持动态创建的话,必定支持运行时类信息;支持序列化,必定支持前面的两个功能,因为它们的声明和实现都是后者包含前者。
综合示例:
定义一个支持串行化的类CPerson:
class CPerson : public CObject
{
public:
DECLARE_SERIAL( CPerson )
// 缺省构造函数
CPerson(){}{};
CString m_name;
WORD m_number;
void Serialize( CArchive archive );
// rest of class declaration
};
实现该类的成员函数Serialize,复盖CObject的该函数:
void CPerson::Serialize( CArchive archive )
{
// 先调用基类函数的实现
CObject::Serialize( archive );
// now do the stuff for our specific class
if( archive.IsStoring() )
archive m_name m_number;
else
archive m_name m_number;
}
使用运行时类信息:
CPerson a;
ASSERT( a.IsKindOf( RUNTIME_CLASS( CPerson ) ) );
ASSERT( a.IsKindOf( RUNTIME_CLASS( CObject ) ) );
动态创建:
CRuntimeClass* pRuntimeClass = RUNTIME_CLASS(CPerson)
//Cperson有一个缺省构造函数
CObject* pObject = pRuntimeClass-CreateObject();
Assert( pObject-IsKindOf(RUNTIME_CLASS(CPerson));
实现CObject特性的机制
由上,清楚了CObject的结构,也清楚了从CObject派
您可能关注的文档
- 2010生物高考复习《分子和细胞》专题系列课件10《细胞器--系统内分工合作》.ppt
- 2012-2013年理工线性代数考试A卷答案.doc
- 2013外研版选修六Module-1《Small-Talk》教学课件.ppt
- 【人教版】2017年道德与法治七下:1.3.2《青春有格》教学课件.ppt
- 2015-2016年上海市复旦大学附中高一(上)期末数学试卷.doc
- 2016年广东面试真题(乡镇)解析汇总.docx
- 2014年广东省中考化学科考试试题【Word】.doc
- 2016年天津市高考历史考试试卷.doc
- 2017-2018年八年级英语下学期教学水平模拟试题附答案.doc
- 2017--2018年七年级期末历史试卷-普通用卷.docx
最近下载
- 电厂 电气维修培训课件.ppt VIP
- 电气设备操作与检修安全课件.ppt VIP
- 2025曲靖供电局及所属县级供电企业项目制用工招聘(55人)笔试备考试题及答案解析.docx VIP
- 雷克萨斯-Lexus RX-产品使用说明书-RX200t-AGL20L-AWTGZC2-RX200tOM_OM48E46C_01-1509-00.pdf VIP
- 基于Glauert法的风力机叶片设计设计说明书论文.docx VIP
- 企业法律知识培训讲座培训课件——房地产法律合规与风险管控(1).pptx VIP
- 2025南方电网保山供电局项目制用工招聘(3人)笔试备考试题及答案解析.docx VIP
- 大学生五四青年课活动策划书范文 - 172校园活动网.doc VIP
- 烹调工艺学全套教学课件.pptx
- 新时达电梯控制系统AS380S随机图纸RH0000741;国标20;非18芯;V1.0.pdf
文档评论(0)