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

被折叠的 条评论
为什么被折叠?



