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


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

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

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

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


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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值