CRuntimeClass

转载 2007年10月12日 14:28:00
  文章指数:0  CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。

CRuntimeClassMFC中的作用很重要,因为MFC利用它来进行类的动态确定,即是通过类变量来判定该变量是否为某一类的实例。由于指针的类型是可以转换的,所以时常会出现从AB的转换导致错误。而在MFC的各种书籍中对CRuntimeClass的介绍是比较少的,在这里总结它的一些用法。
1
、动态确定类
MFCCObject::IsKindOf( const CRuntimeClass* pClass ) 利用CRuntimeClass来进行判定,如果你生成的类是以CObject为基础的,你可以使用该成员函数来判定。下面举一个例子来加深了解。

class CAge:public CObject
BOOL IsAge(CObject
* pO)
{
    
return pO->IsKindOf( RUNTIME_CLASS( CAge ) );
}

BOOL IsAge2(CAge
* pO)
{
    
return pO->IsKindOf( RUNTIME_CLASS( CAge ) );
}

void main(void)
{
    CObject a;
    CAge b;
    IsAge(
&a);//return FALSE
    IsAge(&b);//return TRUE
    IsAge2((CAge*)&a);//return FALSE,避免强制转换带来的错误
}

 2、生成类
CObject CRuntimeClass::CreateObject(void)
可以产生一个类变量。作用和new类似,但在某些特殊场合有独特的作用。下面举一个例子来加深了解。
假定有以下几个类定义

在上面例子中,CreateWnd返回的是CWnd* 其实它是一个CWndA*。你可以进行由父类到子类的强制转换而不必要担心出错。使用CRuntimeClass可以代替使用switch生产类实例的一些繁琐。(请好好想想它的用途,当你发现它的好处时,你一定会大吃一惊,M$使用宏来实现类的动态检测,如果谁有兴趣可以去看看MFC的源代码。)
注意:在类的定义中使用IMPLEMENT_DYNCREATE后方可生效。 

class CWndA: public CWnd
class CWndB: public CWnd
function1()
{
    CRuntimeClass
* pC=RUNTIME_CLASS( CWndA );
    CreateWnd(pC);
}

CWnd
* CreateWnd(CRuntimeClass* pClass)
{
    
return (CWnd*)pClass->CreateObject();
}


 

说说MFC中CRuntimeClass和CObject之间的那点事

MSDN曰:对于MFC中每个从CObject派生的类来说,都有一个相关的CRuntimeClass结构体,在程序运行时可以访问该结构体来获取对象及其基类的信息。 CRuntimeClass是一个结构...
  • wishfly
  • wishfly
  • 2013年03月19日 14:23
  • 3493

RUNTIME_CLASS(运行时间类)

学mfc学到文档,视图和框架的时候,知道必须在这三个类的派生类的类声明 里加上DECLARE_DYNCREATE,然后在类声明外合适的地方加上IMPLEMENT_DYNCREA T...
  • ghevinn
  • ghevinn
  • 2014年03月04日 14:01
  • 8567

程序基石系列之C++运行时类型转换(Runtime Cast)

通过pointer或reference来决定对象运行时类型的一种方法是使用运行时类型转换(runtime cast),用这种方法可以查证所尝试进行的转换正确与否。当要把基类pointer转换为派生类型...
  • utimes
  • utimes
  • 2014年02月22日 17:01
  • 1261

CRuntimeClass

CRuntimeClass在MFC中定义为一个数据结构,在文件AFX.H中声明,它是用来串起MFC从CObject继承下来的所有类(相当于一根绳,只要你牵住绳的一头你就可以得到绳上的所有数据),你也可...
  • prettywhitewolf_xiao
  • prettywhitewolf_xiao
  • 2011年03月20日 17:35
  • 339

MFC学习之 一 CObject和CRuntimeClass

一、CRuntimeClass CObject和CRuntimeClass是MFC中两个非常重要的类/结 构,绝大部分MFC类都是以CObject做为基类, CRuntimeClass结构同...
  • dianxinll
  • dianxinll
  • 2012年09月26日 10:28
  • 288

深入浅出MFC学习笔记1--CRuntimeClass相关

1.MFC数个重要类层次关系仿真CObject,CCmdTarget, CWnd,CFrameWnd,CDocument,CView CWinApp,CWinThread2.MFC程序初始化和运行...
  • x13262608581
  • x13262608581
  • 2015年10月06日 22:37
  • 499

C++动态识别与生成以及在MFC CRuntimeClass的应用

P>C++语言的爱好者们,不知你们注意到了没有,在编写某些程序时,如果能够根据一个类的名字动态地生成此类, 那么,整个程序的结构就能够非常简练.举个例子,你的程序需要用到一个文本文件,而此文件中存放着...
  • weiaipan1314
  • weiaipan1314
  • 2016年06月29日 15:37
  • 251

CRuntimeClass的作用详解

// Runtime class serialization code CRuntimeClass* PASCALCRuntimeClass::Load(CArchive& ar, UINT* pw...
  • wanxiaohong1350
  • wanxiaohong1350
  • 2012年05月26日 11:39
  • 2882

MFC中CRuntimeClass和CObject

MSDN曰:对于MFC中每个从CObject派生的类来说,都有一个相关的CRuntimeClass结构体,在程序运行时可以访问该结构体来获取对象及其基类的信息。 CRuntimeClass是一个结构...
  • Liang4
  • Liang4
  • 2012年02月28日 13:56
  • 412

RUNTIME_CLASS(class_name) a CRuntimeClass structure .

RUNTIME_CLASS()是一个宏定义,定义如下: #define RUNTIME_CLASS(class_name) ((CRuntimeClass*)(&class_name::class...
  • heary29
  • heary29
  • 2015年02月07日 14:03
  • 249
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CRuntimeClass
举报原因:
原因补充:

(最多只允许输入30个字)