纯虚函数的一些问题和注意事项
纯虚函数是一个不错的设计, 他可以完全抽象的实现一个类,并且要求其子类完成他自己不能完成的方法.
比如, 我设计一个 WebBrowser 的容器类, 其中的许多接口的方法要求提供存放容器的窗口句柄,
不幸的是, 这个不是WebBroser 所能知道的,这也是不应该知道的, 于是,我们编写一个纯虚函数 virtual GetHWND( void ) = 0;
这样,任何一个窗口类,想要实现WebBrowser,只要继承这个类,同时提供方法 GetHWND() 就可以圆满的解决问题了.
当然,纯虚函数也有其软肋, 微软的VS手册说过纯虚函数的弱点: 在抽象类的构造函数中, 绝对不能调用,或者间接调用纯虚函数, 如果你尝试调用,会有RunTimeError 告知你调用了一个纯虚函数. 因为此时,你的子类还没有捆绑这个虚函数.
关于这个问题,我会在稍后的 "使用C++类实现纯SDK之WebBrowser控件" 中举例讲到这个问题, 在那里, 构造函数非常间接的调用了纯虚函数, 仍然是错误的. 在这种情况下, 一个折中的方法是写一个虚函数而不是纯虚函数.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏