zoukankan      html  css  js  c++  java
  • 初识MFC----运行时类信息机制

    1、运行时类信息机制的作用

      程序运行过程中,可以获知对象的相关类的信息

    2、运行时类信息机制的使用

      2.1类必须派生自CObject类

      2.2类内必须添加声明宏 DECLARE_DYNAMIC

      2.3类外必须添加实现宏 IMPLEMENT_DYNAMIC

      CObject::IsKindOf(...) -来判断对象是否属于某个类

    3、数据结构

      struct CRuntimeClass

      {

        LPCSTR m_lpszClassName;  //类的名称

        int m_nObjectSize;  //类的大小

        UINT m_wSchema;  //类的版本

        //是用于动态创建机制的,在用于运行时类信息机制时为NULL

        CObject* (PASCAL* m_pfnCreateObject)(); 

        CRuntimeClass* m_pBaseClass;  //父类静态变量地址(连接链表)

        CRuntimeClass* m_pNextClass;  //为NULL

      };

    4、宏展开的代码

    5、宏展开的各部分的作用

      classCDog -静态变量,保存了关于类的信息,连接一个链表

      GetRuntimeClass -虚函数,获取本类静态变量地址(获取链表头节点)

    6、IsKindOf 执行过程

      6.1利用CDog类的对象(yellowdog)调用虚函数GetRuntimeClass()获取CDog类的静态变量地址(链表头节点)

      6.2将CDog类的静态变量和目标进行比对,如果相等,证明对象属于这个类,如果不相等获取父类静态变量循环和目标进行比对。

      6.3只要有一次相等也能证明对象属于这个类

      6.4循环结束始终比对不成功,证明对象不属于这个类

    RUNTIME_CLASS(theClass)  -返回括号中类的静态变量地址 &theClass::classtheClass

  • 相关阅读:
    部分数据文件损坏的修复处理示例.sql
    使用UPDATE进行编号重排的处理示例.sql
    DNS Prefetching 技术引入及实现方法
    查找指定节点的所有子节点的示例函数.sql
    特殊的交叉报表处理示例.sql
    定时备份FTP+Mysql到云服务器
    cPanel下安装GodaddySSL教程
    移动节点处理的通用存储过程.sql
    应用程序角色使用示例.sql
    文件及文件组备份与还原示例.sql
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6918671.html
Copyright © 2011-2022 走看看