zoukankan      html  css  js  c++  java
  • DYNAMIC_DOWNCAST STATIC_DOWNCAST IsKindOf

     

    DYNAMIC_DOWNCAST(class, pointer ):如果pointer指针所指向的对象是class类型的,就返回这个指针。否则返回NULL

    pwnd 你获取到的指针

    class 你的类

    class A;

    例如 你获取到一个指针 XXX *pointer; 你想判断它是不是指向某个类 例如   A 这个类

    A* p= DYNAMIC_DOWNCAST(A, pointer );

    如果pointer是指向A这个类则返回此指针,否则返回空

    CRuntimeClass和IsKindOf的关系

    CRuntimeClass在MFC中的作用很重要,因为MFC利用它来进行类的动态确定,即是通过类变量来判定该变量是否为某一类的实例。由于指针的类型是可以转换的,所以时常会出现从A到B的转换导致错误。而在MFC的各种书籍中对CRuntimeClass的介绍是比较少的,在这里总结它的一些用法。

     

    动态确定类

        在MFC中

    BOOL CObject::IsKindOf(

       const CRuntimeClass* pClass  

    ) const;

    利用CRuntimeClass来进行判定,如果你生成的类是以CFrameWnd为基础的,你可以使用该成员函数来判定。下面举一个例子来加深了解。

    -----------------------------------------------------------------------------------------------------------------------------------------------

     

     

     

    #include <afxwin.h>

     

     

    class Type1public CObject {};        //类型一,从CObject派生

    class Type2public CFrameWnd {};    //类型二,从CFrameWnd派生

     

    BOOL IsType1(CObject *pFrameWnd)    //判断函数

    {

         return pFrameWnd->IsKindOf(RUNTIME_CLASS(CFrameWnd));    //判断是不是CFrameWnd的类型,请注意这里的红色字体

    }

    BOOL IsType2(CObject *pObject)

    {

        return pObject->IsKindOf(RUNTIME_CLASS(CObject));    //判断是不是CObject类型

    }

     

     

    int main()

    {

         Type1 t1;

         Type2 t2;

         ASSERT(IsType1(&t1) == FALSE);    //返回假.因为t1不对应CFrameWnd的类型

         ASSERT(IsType1(&t2) == TRUE);     //正确.t2对应CFrameWnd的类型

        ASSERT(IsType2(&t1) == TRUE);    //t1就是从CObject派生

        ASSERT(IsType2(&t2) == TRUE);    //t2也是从CObject派生    <类型识别网>

         return 0;

    }

     

    STATIC_DOWNCAST

    强制转换为指向 CYourDocument,称为 pYourDoc 是指向 CDocument 使用下面的表达式的指针的指针:  

    CDocument* pDoc = STATIC_DOWNCAST(CDocument, pYourDoc);

  • 相关阅读:
    【学习笔记】整除分块
    【Luogu P2201】【JZOJ 3922】数列编辑器
    【SSL1786】麻将游戏
    【SSL2325】最小转弯问题
    【JZOJ 3910】Idiot 的间谍网络
    【Luogu P1879】[USACO06NOV]玉米田Corn Fields
    【JZOJ 3909】Idiot 的乘幂
    【JZOJ 3918】蛋糕
    【Luogu P3174 】[HAOI2009]毛毛虫
    【SSL1194】最优乘车
  • 原文地址:https://www.cnblogs.com/bigbigtree/p/2289793.html
Copyright © 2011-2022 走看看