纯虚函数的一些问题和注意事项
纯虚函数是一个不错的设计, 他可以完全抽象的实现一个类,并且要求其子类完成他自己不能完成的方法.
比如, 我设计一个 WebBrowser 的容器类, 其中的许多接口的方法要求提供存放容器的窗口句柄,
不幸的是, 这个不是WebBroser 所能知道的,这也是不应该知道的, 于是,我们编写一个纯虚函数 virtual GetHWND( void ) = 0;
这样,任何一个窗口类,想要实现WebBrowser,只要继承这个类,同时提供方法 GetHWND() 就可以圆满的解决问题了.
当然,纯虚函数也有其软肋, 微软的VS手册说过纯虚函数的弱点: 在抽象类的构造函数中, 绝对不能调用,或者间接调用纯虚函数, 如果你尝试调用,会有RunTimeError 告知你调用了一个纯虚函数. 因为此时,你的子类还没有捆绑这个虚函数.
关于这个问题,我会在稍后的 "使用C++类实现纯SDK之WebBrowser控件" 中举例讲到这个问题, 在那里, 构造函数非常间接的调用了纯虚函数, 仍然是错误的. 在这种情况下, 一个折中的方法是写一个虚函数而不是纯虚函数.