MFC教程(3)-- CObject类
2010-03-25 20:33:52 来源:WEB开发网成员变量class##class_name的内容
IMPLEMENT_DYNCREATE等宏将初始化类的CRuntimeClass类型静态成员变量的各个域,表3-1列出了在动态类信息、动态创建、序列化这三个不同层次下对该静态成员变量的初始化情况:
表3-1 静态成员变量class##class_name的初始化
CRuntimeClass成员变量 |
动态类信息 |
动态创建 |
序列化 |
m_lpszClassName |
类名字符串 |
类名字符串 |
类名字符串 |
m_nObjectSize |
类的大小(字节数) |
类的大小(字节数) |
类的大小(字节数) |
m_wShema |
0xFFFF |
0xFFFF |
1、2等,非0 |
m_pfnCreateObject |
NULL |
类的成员函数 CreateObject |
类的成员函数 CreateObject |
m_pBaseClass |
基类的CRuntimeClass变量 |
基类的CRuntimeClass变量 |
基类的CRuntimeClass变量 |
m_pfnGetBaseClass |
类的成员函数 _GetBaseClass |
类的成员函数 _GetBaseClass |
类的成员函数 _GetBaseClass |
m_pNextClass |
NULL |
NULL |
NULL |
m_wSchema类型是UINT,定义了序列化中保存对象到文档的程序的版本。如果不要求支持序列化特性,该域为0XFFFF,否则,不能为0。
Cobject类本身的静态成员变量classCObject被初始化为:
{ "CObject", sizeof(CObject), 0xffff, NULL, &CObject::_GetBaseClass, NULL };
对初始化内容解释如下:
类名字符串是“CObject”,类的大小是sizeof(CObject),不要求支持序列化,不支持动态创建。
成员函数CreateObject
回顾3.2节,动态创建对象是通过语句pRuntimeClass->CreateObject完成的,即调用了CRuntimeClass自己的成员函数,CreateObject函数又调用m_pfnCreateObject指向的函数来完成动态创建任务,如下所示:
CObject* CRuntimeClass::CreateObject()
{
if (m_pfnCreateObject == NULL) //判断函数指针是否空
{
TRACE(_T("Error: Trying to create object which is not ")
_T("DECLARE_DYNCREATE or DECLARE_SERIAL: %hs. "),
m_lpszClassName);
return NULL;
}
//函数指针非空,继续处理
CObject* pObject = NULL;
TRY
{
pObject = (*m_pfnCreateObject)(); //动态创建对象
}
END_TRY
return pObject;
}
更多精彩
赞助商链接