深入浅出MFC一书中使用IsKindOf函数时一般都会这样使用
CView* Pview=NEW Cview;
Pview->IsKindOf(RUNTIME_Class(CView))
第一个问题是:我想问的是IsKindOf函数本身的作用就是判断一个对象是否属于某一类或其派生类,那像上面这句CView* Pview=NEW Cview;其实已经很明确的告诉你Cview属于CView类类型指针,其实也已经告诉你它是属于CView类,那为什么还要再用IsKindOf函数在判断一下呢?
第二个问题是:再者其实向下面这段程序也是一样的既然都已经知道Cview是CView类的对象,而CView类又是从CWnd派生的类,那还用IsKindOf在判断一次干嘛?
CView* Pview=NEW Cview;
Pview->IsKindOf(RUNTIME_Class(CWnd))
第三个问题是:就是为什么VC必须要有对象自动类型判断功能,没有不行吗?为什么?

解决方案 »

  1.   

    CView* Pview=NEW Cview;
    Pview->IsKindOf(RUNTIME_Class(CView));
    这个地方是有点多余吧,但中间要是夹着一些代码似乎就有用了
    或者看下面的例子// in .H file
    class CPerson : public CObject
    {
        DECLARE_DYNAMIC( CPerson )
    public:
        CPerson(){};    // other declaration 
    };// in .CPP file
    IMPLEMENT_DYNAMIC( CPerson, CObject )void SomeFunction(void)
    {
       CObject* pMyObject = new CPerson;   if(pMyObject->IsKindOf( RUNTIME_CLASS( CPerson ) ) )
       {
          //if IsKindOf is true, then cast is all right
          CPerson* pmyPerson = (CPerson*) pMyObject ;
          ...
          delete pmyPerson;
       }
    ...
       delete [MyObject];
    }====================================纯属个人看法
      

  2.   

    跟MFC的DECLARE_DYNAMIC自动类型识别那一套有关~
      

  3.   

    IsKindOf还是很有用的
    很多时候,是用在多个派生类中,比如有CView1 和CView2 和CView3 同时派生自CView。
    则你可以声明 CView的指针 获得视图。
    然后 根据判断是属于哪个类,转换成对应的视图指针。
      

  4.   

    看看侯捷的《深入浅出MFC》,有一章专门结束RTTI(Run-Time Type Identification,运行时类型识别)
    看完你就知道它的作用啦