该书第109页中讲到仿真“类型识别”的问题时,举了一个例子(倒数第5行):CView* pView=new CView;
pView->IsKindOf(RUNTIME_CLASS(CWinApp));接着说到:“IsKindOf的参数其实就是&CWinApp::classCWinApp,函数内利用GetRuntimeClass先取得&CView::classCView,然后循线而上,每获得一个
CRuntimeClass对象指针,就拿来和CView::classCView的指针比较”怎么会是“和CView::classCView的指针比较”?应该是“和
CWinApp::classCWinApp的指针比较”吧!

解决方案 »

  1.   

    老大,你是pView的IsKindOf()怎么会和CWinApp扯上呢?
      

  2.   

    书上这么说的:
    (所谓循线分别是指Cview,Cwnd,CCmdTarget,Cobject)每获得一个CRuntimeClass对象就拿来和CView::classCView的指针比较。
    既然寻线里面有CView那还和CView比较个什么呢,肯定是一样的。所以,同意楼主
      

  3.   

    首先说明, 书上的写法没有错:
    因为RUNTIME_CLASS的宏的定义是
    #define RUNTIME_CLASS(class_name) \
    ((CRuntimeClass*)(&class_name::class##class_name))所以pView->IsKindOf(RUNTIME_CLASS(CWinApp));可以展开成
    pView->IsKindOf(&CWinApp::classCWinApp);
    你看与你所指的意思是不是相符合!还有楼上的是不是说错了呢,IsKindOf()是用来判断指定的对象是不是括号内对象的基类.
    而CView的基类是CWnd;当然要那么来判断了
    所以应该是pView与CWinApp::classCWinApp的地址进行类型识别而我们