该书第109页中讲到仿真“类型识别”的问题时,举了一个例子(倒数第5行):CView* pView=new CView;
pView->IsKindOf(RUNTIME_CLASS(CWinApp));接着说到:“IsKindOf的参数其实就是&CWinApp::classCWinApp,函数内利用GetRuntimeClass先取得&CView::classCView,然后循线而上,每获得一个
CRuntimeClass对象指针,就拿来和CView::classCView的指针比较”怎么会是“和CView::classCView的指针比较”?应该是“和
CWinApp::classCWinApp的指针比较”吧!
pView->IsKindOf(RUNTIME_CLASS(CWinApp));接着说到:“IsKindOf的参数其实就是&CWinApp::classCWinApp,函数内利用GetRuntimeClass先取得&CView::classCView,然后循线而上,每获得一个
CRuntimeClass对象指针,就拿来和CView::classCView的指针比较”怎么会是“和CView::classCView的指针比较”?应该是“和
CWinApp::classCWinApp的指针比较”吧!
(所谓循线分别是指Cview,Cwnd,CCmdTarget,Cobject)每获得一个CRuntimeClass对象就拿来和CView::classCView的指针比较。
既然寻线里面有CView那还和CView比较个什么呢,肯定是一样的。所以,同意楼主
因为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的地址进行类型识别而我们