在编写MFC代码时会发现自己写的所有控件和窗口都是从一个基类继承而来的,但是自己把派生类写好之后并没有把派生类覆盖到基类身上,但是自己写的派生类还是被运行了。
class A
{
public:
   virtual int f()=0;
};class B : public A
{
public:
   virtual int f()
        {
            return 12;
        }
};A *a;
B b;
main()
{
    a=&b;
    std::cout<<a->f();
}
比如上面的写法,一定需要吧派生类b覆盖回虚基类a,才能执行std::cout<<a->f();我想MFC中也有类似的过程,但是它具体是怎么做到的?MFC中还有一个奇怪的地方:
int CMFCDirectXApp::Run()
{
// TODO: 在此添加专用代码和/或调用基类 while (msg.message!=WM_QUIT)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
} return CWinApp::Run();
}
上面是在CMFCDirectXApp中重载了Run(),但是代码的最后一行“return CWinApp::Run();”是什么意思,具体作用是什么?谢谢!

解决方案 »

  1.   

    MFC是C++的类库,所使用的语言也就是C++
    楼主看来被迷惑了~
    推荐你看《C++对象模型》
      

  2.   

    上面是在CMFCDirectXApp中重载了Run(),但是代码的最后一行“return CWinApp::Run();”是什么意思,具体作用是什么? 
    一个是cmfcdirectxapp的RUN,一个是基类cwinapp的run
      

  3.   

    因为CMFCDirectXApp::Run() 函数
    是重载了CWinApp的Run() 函数的,所以如果执行了CMFCDirectXApp的Run() 那么CWinApp的Run() 就不再执行了。因为CWinApp::Run()中也许有默认的执行程序,所以为了程序能调用那些默认的程序,就要在后面加上CWinApp::Run(),来执行CWinApp 中的Run方法。 
      

  4.   

    最后一行return CWinApp::Run(); 调用了CWinApp类中的Run方法,就这么简单
      

  5.   

    return CWinApp::Run(); //相当于this->CWinApp::Run();
    表示调用基类CWinApp的Run()函数。