纯虚函数的一些问题和注意事项


纯虚函数是一个不错的设计, 他可以完全抽象的实现一个类,并且要求其子类完成他自己不能完成的方法.

比如, 我设计一个 WebBrowser 的容器类, 其中的许多接口的方法要求提供存放容器的窗口句柄,

不幸的是, 这个不是WebBroser 所能知道的,这也是不应该知道的, 于是,我们编写一个纯虚函数  virtual GetHWND( void ) = 0;

这样,任何一个窗口类,想要实现WebBrowser,只要继承这个类,同时提供方法 GetHWND() 就可以圆满的解决问题了.


当然,纯虚函数也有其软肋, 微软的VS手册说过纯虚函数的弱点:  在抽象类的构造函数中, 绝对不能调用,或者间接调用纯虚函数, 如果你尝试调用,会有RunTimeError 告知你调用了一个纯虚函数. 因为此时,你的子类还没有捆绑这个虚函数.

关于这个问题,我会在稍后的 "使用C++类实现纯SDK之WebBrowser控件" 中举例讲到这个问题, 在那里, 构造函数非常间接的调用了纯虚函数,  仍然是错误的.  在这种情况下,  一个折中的方法是写一个虚函数而不是纯虚函数.

posted on 2008-09-10 17:30  norsd  阅读(206)  评论(0编辑  收藏  举报

导航