设为首页 加入收藏

TOP

5.4.2 代码演练(2)
2013-10-07 00:45:21 来源: 作者: 【 】 浏览:55
Tags:5.4.2 代码 演练

5.4.2  代码演练(2)

(2)在MFC.cpp中实现类定义的关键代码:

01 CObject* CRuntimeClass::CreateObject()  //根据CRuntimeClass创建对象
02 {
03   if (m_pfnCreateObject == NULL)
04   {
05       TRACE1("Error: Trying to create object which is not "
06              "DECLARE_DYNCREATE \nor DECLARE_
SERIAL: %hs.\n", m_lpszClassName);
07      return NULL;
08   }
09   CObject* pObject = NULL;
10   pObject = (*m_pfnCreateObject)();
11   return pObject;
12 }
13 CRuntimeClass* PASCAL CRuntimeClass::Load()  //
获取用户想要创建的对象的类名
14 {
15   char szClassName[64];
16   CRuntimeClass* pClass;       //用CRuntimeClass的指针对象存储类信息
17   cout << "enter a class name...  ";    //输入类名
18   cin >> szClassName;       //获取用户输入
19   for (pClass = pFirstClass; pClass != NULL;
pClass = pClass->m_pNextClass)
20   {         //检查用户指定的类是否支持动态创建
21      if (strcmp(szClassName, pClass->m_lpszClassName) == 0)
22          return pClass;
23   }
24   TRACE1("Error: Class not found: %s \n", szClassName);
25   return NULL; // not found
26 }
27 CRuntimeClass* CObject::GetRuntimeClass() const
28 {
29   return &CObject::classCObject;     //返回CRuntimeClass对象
30 }
31 BOOL CObject::IsKindOf(const CRuntimeClass* pClass) const
32 {
33    CRuntimeClass* pClassThis = GetRuntimeClass(); //获得类信息
34    while (pClassThis != NULL)      //对比类信息
35    {
36       if (pClassThis == pClass)
37           return TRUE;
38       pClassThis = pClassThis->m_pBaseClass;  
//沿着父类继续查找并对比
39    }
40    return FALSE;     
41 }
42 ……         //此处代码省略
43 IMPLEMENT_DYNAMIC(CCmdTarget, CObject)    //初始化CRuntimeClass对象
44 IMPLEMENT_DYNAMIC(CWinThread, CCmdTarget)
45 IMPLEMENT_DYNAMIC(CWinApp, CWinThread)
46 IMPLEMENT_DYNAMIC(CDocument, CCmdTarget)
47 IMPLEMENT_DYNCREATE(CWnd, CCmdTarget)    //提供动态创建的实现
48 IMPLEMENT_DYNAMIC(CView, CWnd)
49 IMPLEMENT_DYNCREATE(CFrameWnd, CWnd)

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇5.4.2 代码演练(3) 下一篇5.4.2 代码演练(1)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: