retweet

“c++ 的virtual 关键字带来的问题“想到的

今天偶然看到以前下载的c++view杂志第一期,《C++的不足之处讨论系列(一):虚拟函数 》(原文出自《C++?? A Critique of C++ and Programming and Language Trends of the 1990s 3/E【Ian Joyner 1996】》)。 这篇文章介绍了c++写基类时必须作决定一个函数是virtual还是非virtual所带来的缺点。 文章指出“是使用现有的函数还是重写一个,这应该是由撰写子类的程序员所决定的。在C++中,要想拥有这种能力则必须在父类中指定为virtual。对于OOD来说,你所决定不想作的与你所决定想作的同样重要,你的决定应该是越迟下越好。这种策略可以避免错误在系统前期就被包含进去。你作决定越早,你就越有可能被以后所证明是错误的假设所包围;或是你所作的假设在一种情况下是正确的,然而在另一种情况下却会出错,从而使得你所写出来的软件比较脆弱,不具有重用性(reusable)” “解决方法就是virtual不应该在父类中就被指定好。当我们需要运行时的动态绑定时,我们就在子类中指定需要对某个函数进行重写。这样做的好处在于:对于具有多态性的函数,编译器可以检测其函数签名(function signature)的一致性;而对于重载的函数,其函数签名在某些方面本来就不一样。第二个好处表现在,在程序的维护阶段,能够清楚地表达程序的最初意愿。而实际上后来的程序员却经常要猜测先前的程序员是不是犯了什么错误,选择一个相同的名字,还是他本来就想重载这个函数。” 而且提到Object Pascal做到了这一点:程序员在子类中指定以什么方式重定义,的确在我写delphi代码时也注意到了,子类函数中可以指定一个函数是overload还是override. 我当时怎么没有深入地思考这样做的原因呢?嗬嗬,看来平时还是要多用心,在运用语言的时候,要思考语言本身为什么这么设计,这样才能加深对语言和工具的理解和运用水平。
--EOF--

若无特别说明,本站文章均为原创,转载请保留链接,谢谢

本文地址: http://www.dulao5.com/cpp/2006/01/08/cpp-virtual.textile