作用

在程序运行过程中可以获知对象的类的相关信息:机器知道

运行时类信息机制使用

类必须派生自CObject
类内必须添加声明宏 DECLARE_DYNAMIC(theClass)
类外必须添加实现宏 IMPLEMENT_DYNAMIC(theClass,baseClass)
具备上述要件,CObject::IsKindOF可以正确判断对象是否属于某个类

代码的书写

定义一个A类,派生自CObject,类内外声明宏和实现宏
定义一个B类,派生自A,类内外声明宏和实现宏

#include <afxwin.h>
#include<iostream>
using namespace std;
class CAnimal :public CObject {DECLARE_DYNAMIC(CAnimal)
};
IMPLEMENT_DYNAMIC(CAnimal, CObject)class CDog :public CAnimal {DECLARE_DYNAMIC(CDog)
};
IMPLEMENT_DYNAMIC(CDog,CAnimal)
int main() {CDog yellowdog;if (yellowdog.IsKindOf(RUNTIME_CLASS(CWnd))){cout<<"yellowdog is CWnd"<<endl;}else {cout<<"yellowdog is not CWnd"<<endl;}return 0;
}

扩展代码

#include <afxwin.h>
#include<iostream>
using namespace std;
class CAnimal :public CObject {DECLARE_DYNAMIC(CAnimal)
};
IMPLEMENT_DYNAMIC(CAnimal, CObject)class CDog :public CAnimal {//DECLARE_DYNAMIC(CDog)
public: static const CRuntimeClass classCDog; virtual CRuntimeClass* GetRuntimeClass() const;
};
//IMPLEMENT_DYNAMIC(CDog,CAnimal)
//IMPLEMENT_RUNTIMECLASS(CDog, CAnimal, 0xFFFF, NULL, NULL)AFX_COMDAT const CRuntimeClass CDog::classCDog =
{"CDog", sizeof(class CDog), 0xFFFF, NULL,RUNTIME_CLASS(CAnimal), NULL,NULL
};
CRuntimeClass* CDog::GetRuntimeClass() const
{ return RUNTIME_CLASS(CDog);
}int main() {CDog yellowdog;if (yellowdog.IsKindOf(RUNTIME_CLASS(CWnd))){cout<<"yellowdog is CWnd"<<endl;}else {cout<<"yellowdog is not CWnd"<<endl;}return 0;
}

struct CRuntimeClass{
LPCSTR m_lpszClassName; //类名称
int m_nObjectSize;//类大小
UINT m_wSchema; // 类版本
CObject* (PASCAL* m_pfnCreateObject)(); // 动态创建机制,这里为空
CRuntimeClass* m_pBaseClass;//父类宏展开静态变量地址
CRuntimeClass* m_pNextClass; //不使用时为空
const AFX_CLASSINIT* m_pClassInit; //不使用时为空
};

宏展开各部分作用


classCDog静态变量:保存为类名、类大小等信息,以及符类静态变量地址(负责连接链表)
GetRuntimeClass 虚函数:获取奔雷的静态变量地址(本类表头)

执行过程

【MFC学习】运行时类信息机制相关推荐

  1. ObjectARX运行时类信息实现原理

    新公司维护基于CAD的二次开发旧代码.学习ObjectARX相关的内容. 先看原始代码 class MyClass: public AcRxObject { public:virtual AcRxCl ...

  2. 【Java 19】反射 - 反射机制概述、获取Class实例、类的加载与ClassLoader的理解、创建运行时类的对象、获取运行时类的完整结构、调用运行时类的指定结构、动态代理

    反射机制概述.获取Class实例.类的加载与ClassLoader的理解.创建运行时类的对象.获取运行时类的完整结构.调用运行时类的指定结构.动态代理 反射 1 Java反射机制概述 1.1 Java ...

  3. C++-运行时类型信息,异常(day11)

    一.运行时类型信息 1.typeid运算符 头文件:#include<typeinfo> C++的标准头文件,都对应相应的类 //sizeof(类型/变量/表达式),返回内存大小 type ...

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

    RTTI, RunTime Type Information, 运行时类型信息, 是多态的主要组成部分,  通过运行时(runtime)确定使用的类型, 执行不同的函数,复用(reuse)接口. dy ...

  5. wxWidgets:运行时类型信息 (RTTI)

    wxWidgets:运行时类型信息 (RTTI) wxWidgets:运行时类型信息 (RTTI) 类信息 RTTI例子 wxWidgets:运行时类型信息 (RTTI) C++ 的一个缺点曾经是没有 ...

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

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

  7. Java基础知识点__获取运行时类的完整结构

    通过反射获取运行时类的完整结构 Field,method,Construuuctor,Superclass,Interface,Annotation 实现的全部接口 继承的父类 全部的构造器 全部的构 ...

  8. java rtti_举例讲解Java的RTTI运行时类型识别机制

    1.RTTI:运行时类型信息可以让你在程序运行时发现和使用类型信息. 在Java中运行时识别对象和类的信息有两种方式:传统的RTTI,以及反射.下面就来说下RTTI. RTTI:在运行时,识别一个对象 ...

  9. SAP UI5 标准应用的多语言支持 - SAP UI5 运行时语言判定机制

    SAP UI5 对多语言的支持特性如下: The language codes according to the de facto standard BCP-47, which are used by ...

最新文章

  1. R语言可视化密度图并在密度图中嵌入图例信息、使用geomtextpath包的geom_textdensity函数,将图例(legend)信息嵌入到密度图中
  2. python循环语句-python中的for循环语句怎么写
  3. Java高并发编程:定时器、互斥、同步通信技术
  4. Python轻量级IDE推荐 -- Jupyter QTConosle
  5. ST17H26的PWM模块
  6. oracle 31640,导数据时ora-31640报错
  7. SolidWorks 更新系统注册记录失败
  8. 数据分析必备:掌握这个R语言基础包1%的功能,你就很牛了
  9. qq音乐的歌词接口中例如#58,#46的特殊符号编码使用js进行转义
  10. TP使用unlink删除文件报错:Resource temporarily unavailable
  11. php 中文地址伪静态,.htaccess实现含中文的url伪静态跳转
  12. jxbrowser错误The Chromium profile directory is already used/locked by another BrowserContext instance
  13. python安装pyltp_windows 安装pyltp详细教程
  14. 有效利用PLM系统能为企业带来什么?
  15. 对梯度概念的直观理解
  16. ShaderForge-霓虹漩涡
  17. android 红外驱动,Android内核驱动-红外驱动IR
  18. Android中夜间模式的三种实现方式
  19. windows用虚拟机vmWare安装黑苹果及注意事项
  20. iOS 模拟微信内置浏览器CYWebViewController

热门文章

  1. 自己动手做一个虚拟魔方——建模、还原、可视化
  2. XADC 原理及Xilinx FPGA XADC IP
  3. 查找算法系列之复杂算法:二叉排序树BST
  4. word “兼职”-----不单单是文字处理
  5. 微信小程序调用腾讯地图,获取当前位置得到数据有偏差以及不同软件,不同坐标之间的转换Gcoord
  6. 二氟尼柳或将明显减缓多神经病的恶化
  7. summer如何批量撩小姐姐
  8. 小鼠瘦素ELISA试剂盒,手把手教你测!
  9. session和cookie还有正则
  10. 论文写作-英文注意事项