MFC运行时类型信息(RTCI)

原创 2011年01月21日 16:12:00

 

RTCI(runtime class information)CObject对象提供的一个功能,它能判断一个类是否是从某个类派生而来。

 

       使用RTCI需要满足两个条件:

1、  CObject派生

2、  在类声明中添加DECLARE_DYNAMIC宏,在实现文件中添加IMPLEMENT_DYNAMIC宏。

 

 


 

示例:

 

 用法:

 

 


解析:

IsKindOfCObject中的成员函数,任何从CObject派生而来的类都可以使用它,用来确定是否从特定的类派生而来。

  

RUNTIME_CLASS这个宏将类名称转换为了CRuntimeClass*,它是如何做到的呢?静态库版本定义如下:

RUNTIME_CLASS(CParent)展开就是:((CRuntimeClass*)(&CParent::classCParent))

可以看出,classCParentCParent的成员变量。那它是怎么来的呢?它是DECLARE_DYNAMIC这个宏引入到类中的。

 

DECLARE_DYNAMIC宏定义如下:

DECLARE_DYNAMIC宏在类中引入了一个静态常成员变量和一个用于获取当前类对象CRuntimeClass指针的虚函数。将DECLARE_DYNAMIC(CParent)展开,即为:

  

GetRuntimeClass被定义为虚函数,因为如果被定义为普通成员函数,当以一个指向派生类对象的父类指针调用GetRuntimeClass时,获得的将是对应父类的CRuntimeClass指针。这也是覆盖与多态的区别所在。

 

在类中添加的声明,对应的在实现文件中就应该有实现,IMPLEMENT_DYNAMIC宏用来完成这件事。它初始化了类的静态常变量,并且定义了GetRuntimeClass函数。宏定义如下:

 

CRuntimeClass结构如下:

 

CRuntimeClass中有7个成员变量,还有一些成员函数。RTCI只使用了CRuntimeClass中的三个成员变量:m_lpszClassNamem_nObjectSizem_pBaseClass,也用到了IsDerivedFrom函数。

 

IsDerivedFrom通过向上遍历继承树,来判断对象是否是从某个类派生而来。

 

 

C++运行时类型信息揭密

  • 2012年02月16日 22:52
  • 1KB
  • 下载

运行时类型信息RTTI及类型转换

  • 2008年05月29日 10:27
  • 73KB
  • 下载

[面试] C/C++ 语法(六)—— RTTI(运行时类型信息)

RTTI(RunTime Type Information),顾名思义,对象运行时类型信息,以便在运行时进行类型识别。C++ 的对象识别可通过以下三个技术得以实现: (1)dynamic_cast 运...

4.MFCRTTI,运行时类型信息

RTTI MFC DECLARE_DYNAMIC IMPLEMENT_DYNAMICLASS WINDOWS

使用Java的RTTI(运行时类型信息)要注意的地方

如果要使用Class的应用来构造一个对象的示例, 那么这么对象对应的类必须有一个无参数的构造函数,例如:  Class ref=XXX.class; XXX xxxref=ref.newInsta...
  • afeiluo
  • afeiluo
  • 2014年01月02日 15:58
  • 619

C++ - RTTI(RunTime Type Information)运行时类型信息 详解

RTTI(RunTime Type Information)运行时类型信息 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details...

运行时类型信息

RTTI(在运行时,识别一个对象的类型)可以在程序运行时发现和使用类型信息,这就打破了只能在编译期执行面向类型的操作的限制。使用它,可以查询某个Shape引用所指向的对象的确切类型,然后选择或者剔除特...

C++知识文档十二_运行时类型信息RTTI

运行时类型信息的概念 我们要从面向对象的程序设计角度来理解运行时类型信息(Run-time Type Identification)的概念,面向对象程序设计涉及到一系列技术,这些技术基于类层次机制,...

RTTI 运行时类型信息 与 Reflect 反射

java.lang.reflect.Method 表示类或接口的一个方法。 A Method provides information about, and access to, a single m...
  • chuchus
  • chuchus
  • 2015年02月02日 17:43
  • 416

运行时类型信息RTTI

我们在写C++代码的时候经常碰到使用dynamic_cast进行类型转换的情况,也都知道经过dynamic_cast的转换更加安全,因为dynamic_cast进行了类型检查。 但是可能很多人不知道d...
  • techx
  • techx
  • 2015年03月19日 18:45
  • 570
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC运行时类型信息(RTCI)
举报原因:
原因补充:

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