MFC中是通过什么方法实现 派生类覆盖基类的?

visualvisual 2009-08-24 09:00:25
在编写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();”是什么意思,具体作用是什么?

谢谢!
...全文
121 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
雪影 2009-08-24
  • 打赏
  • 举报
回复
return CWinApp::Run(); //相当于this->CWinApp::Run();
表示调用基类CWinApp的Run()函数。
MoXiaoRab 2009-08-24
  • 打赏
  • 举报
回复
最后一行return CWinApp::Run(); 调用了CWinApp类中的Run方法,就这么简单
xylicon 2009-08-24
  • 打赏
  • 举报
回复
因为CMFCDirectXApp::Run() 函数
是重载了CWinApp的Run() 函数的,所以如果执行了CMFCDirectXApp的Run() 那么CWinApp的Run() 就不再执行了。

因为CWinApp::Run()中也许有默认的执行程序,所以为了程序能调用那些默认的程序,就要在后面加上CWinApp::Run(),来执行CWinApp 中的Run方法。
dirdirdir3 2009-08-24
  • 打赏
  • 举报
回复
上面是在CMFCDirectXApp中重载了Run(),但是代码的最后一行“return CWinApp::Run();”是什么意思,具体作用是什么?


一个是cmfcdirectxapp的RUN,一个是基类cwinapp的run
chenyu2202863 2009-08-24
  • 打赏
  • 举报
回复
MFC是C++的类库,所使用的语言也就是C++
楼主看来被迷惑了~
推荐你看《C++对象模型》

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧