新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 开发语言 > C++ > 正文:C++多态技术的实现和反思

C++多态技术的实现和反思

新客网 XKER.COM 2006-04-28 来源: 收藏本文


  让我们小结一下,面向对象多态性有两种不同的应用场景,而C++的标准多态技术只适合其中一种,对于另一种并不适合,必须以其他机制实现。

  解决思路和建议

  或许有读者读到这里,会对C++产生很大的怀疑。需要说明的是,C++选择的多态性实现技术是完全符合C++哲学的。而且,C++允许你以各种可能的办法来解决这个问题。时至今日,依靠各种成熟的GUI框架,大多数情况下我们可以自动绕过暗礁。

  问题的严重性在于,由于C++教育上的问题,很多开发者对于C++原生多态技术在上述第二种应用场合中的局限性认识不足,因此当他们面临类似的问题时,会不自觉地踏入陷阱中。在此我愿提醒C++开发者,当你面对的系统中含有标准的事件处理特征,而且事件数量较大时,请慎重考虑你的类层次结构设计。可以考虑模仿MFC或者Qt的解决方法,但在我看来,一个更加直接而且简单的方法是,模拟本文第1节中描述的、基于字符串比较的方法查找表,用一个单一的消息分发对象来向各个对象分发消息。由于这个消息分发对象会经常需要调整变化,将它单独放在一个DLL 甚至COM组件中,在运行时加载到进程内。这种方案不是最精巧的,但是在大多数情况下有效,并且实现起来比较简单。限于篇幅,这里不详细描述。

  事实上,我本人认为,C++语言应当从编译器上解决这个问题。基本思路为,当基类虚方法数量大而派生类改写的方法数量小的时候(这个信息可以从编译过程中得到),改变派生类对象的虚方法查找机制,改按位置查找为按被调用函数实际信息查找。这样一来,派生类中的虚方法表可不必与基类保持结构上的一致,从而避免了空间上的浪费。这种思路跟Delphi/Object Pascal语言中dynamic关键字有相似之处。本文不再赘述。

收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐