OnLButtonDown 为什么不能是虚函数?

dnfrank 2004-06-10 07:26:00
近几天正在看两本书,《VC技术内幕》和《深入探讨C++对象模型》,好像有点冲突。前一本书说MFC视图类的方法不能声明为virtual的,因为这些方法多至百个每个用一个指针(比如说4B一个)就得400多B太大了,而用一种类似宏的方法实现(具体我看不懂了求赐教~)。但是后一本书说c++的函数是由一个vtbl来控制的,一个类指向一个vtbl也就一个4B的指针~
这个~问题就是如题啦~望赐教~
...全文
183 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dnfrank 2004-06-13
  • 打赏
  • 举报
回复
这个~听了大家的解释, 我的理解是这样的:
c++的vtbl的用途是把对象的大小压缩了(相比于每个函数都有一个指针),但是vtbl存储在内存的某个地方。对于MFC来说,CView如果用virtual的方法本身大小没有什么改变,但是上百个virtual方法的指针表还是存在在内存中了,还是影响性能。
咳~说得这么乱还不如不说了~
lizifong 2004-06-11
  • 打赏
  • 举报
回复
在MFC编程中其实自己很少要写虚函数,WINDOWS是以事件驱动的,每一个事件只完成特定的任务,根本不要用虚函数;
而在用C++自己做一个工程时,虚函数的应用就不可少了。但也浪费不了什么空间。
tstony987 2004-06-11
  • 打赏
  • 举报
回复
虚函数的机制用于事件的映射比较浪费资源
carbon107 2004-06-11
  • 打赏
  • 举报
回复
enoloo(努力COM)说的好
syy64 2004-06-11
  • 打赏
  • 举报
回复
因为它是响应消息的。
enoloo 2004-06-10
  • 打赏
  • 举报
回复
你还明白她说的是什么意思。

MFC类库很庞大。virtual大家都知道什么意思,也就是他的子类的vtbl中必须有这个函数指针,4B大小。对于MFC来说,他的继承结构很深,而且用户可以从他不断地继承来实现自己的功能,这就要求设计者必须从效率来考虑这个framework.如果用virtual的话,继承结构很深时,每个子类的虚表中有单独的函数指针,实际上迟后绑定只会用到其中某个子类的虚拟接口,这是极大空间的浪费,书上说的也是这个意思。

c++是从语言特性来说的,virtual是c++的一个重要特性。但是,万事都以实际应用为主。很多技术和特性也很有争议。

MFC采用消息映射表的机制,映射表中只分配了需要使用的消息接口,节省了空间。这样有一个限制,就是任何消息都必须要在消息映射表中有对应的函数处理项。消息如果没有找到处理函数,将会流向一个默认处理。
lixiaosan 2004-06-10
  • 打赏
  • 举报
回复
东西都不一样。机制当然会有不同了啊
Wenxy1 2004-06-10
  • 打赏
  • 举报
回复
两回事。

MFC建立在C++上的,
C++没有消息机制。
快乐鹦鹉 2004-06-10
  • 打赏
  • 举报
回复
一个说MFC,一个说C++,两回事啊
dnfrank 2004-06-10
  • 打赏
  • 举报
回复
这个~为什么不矛盾呢~ 还是不懂
hornedreaper 2004-06-10
  • 打赏
  • 举报
回复
你还是一本一本看吧,不要贪多
wangzi163 2004-06-10
  • 打赏
  • 举报
回复
不矛盾啊

16,473

社区成员

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

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

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