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

转载于:https://www.cnblogs.com/norsd/archive/2008/09/10/6359550.html

纯虚函数的一些问题和注意事项相关推荐

  1. 【C++】多态(早期绑定、后期绑定)、抽象类(纯虚函数)、虚析构函数

    我们都知道面向对象编程的三大特征是封装.继承.多态,今天我们就来说一下其中之一的多态. 概念: 多态: 多态字面意思就是多种形态,C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同 ...

  2. 但并不从包含函数声明的接口派生_C++的虚函数和纯虚函数

    虚函数:类成员函数前面添加virtual关键字,则该函数被称为虚函数. 纯虚函数:在虚函数的基础上,在函数末尾加上 = 0. class Animal {public: virtual void Sh ...

  3. 一口气搞懂《虚函数和纯虚函数》

    学习C++的多态性,你必然听过虚函数的概念,你必然知道有关她的种种语法,但你未必了解她为什么要那样做,未必了解她种种行为背后的所思所想.深知你不想在流于表面语法上的蜻蜓点水似是而非,今天我们就一起来揭 ...

  4. 析构函数和虚函数、纯虚函数

    置于"-"是析构函数:析构函数因使用"-"符号(逻辑非运算符),表示它为逆构造函数,加上类名称来定义.  析构函数也是特殊的类成员函数,它没有返回类型,没有参数 ...

  5. C++知识点51——虚函数与纯虚函数(下)

    接上一篇文章https://blog.csdn.net/Master_Cui/article/details/109957146 10.练习 示例 class base { public:base() ...

  6. 第十三周项目三-形状类族中的纯虚函数

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年6月1日 *版 本 ...

  7. c++纯虚函数在父类中调用的规避

    构造和析构函数不允许调用纯虚函数,可以先调用虚函数,里面再调用纯虚函数实现. class Base{ public:     virtual void foo()=0;     Base() { ca ...

  8. 【C++ 语言】面向对象 ( 继承 | 重写 | 子类调用父类方法 | 静态多态 | 动态多态 | 虚函数 | 纯虚函数 )

    文章目录 类的继承 方法的重写 子类中调用父类方法 多态 虚函数 虚函数示例 纯虚函数 相关代码 类的继承 1. 继承表示 : C++ 中继承可以使用 ":" 符号 , 格式为 & ...

  9. C++中为什么要引入抽象基类和纯虚函数?

    为什么要引入抽象基类和纯虚函数? 主要目的是为了实现一种接口的效果. 抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层. ⑴抽象类的定义:带有纯虚函数的类为抽象类. ...

  10. 构造函数不可以是虚函数;析构函数可以是虚函数,也可以是纯虚函数。

    构造函数不可以是虚函数:析构函数可以是虚函数,也可以是纯虚函数. 一:构造函数不能声明为虚函数的原因 1 构造一个对象的时候,必须知道对象的实际类型,而虚函数行为是在运行期间确定实际类型的. 而在构造 ...

最新文章

  1. 谁说只有VGG才能做风格迁移,ResNet也可以!答案就在对抗攻击中
  2. Apache Oltu 实现 OAuth2.0 服务端【授权码模式(Authorization Code)】
  3. 审批政策中收入与负债核实
  4. 【每周CV论文】初学深度学习图像修复应该要读的文章
  5. 在liferay strut2中如何使用session
  6. Cloud for Customer UI Designer里embedded component刷新的讨论
  7. STM32一种基于NTC的控温电路及软件实现
  8. 使用Gradle构建Java项目
  9. Spring 框架 IOC 与 DI 的总结
  10. SpringSecurity-1-前言,登录原理
  11. java输入两个整数_Java中从键盘输入多个整数的方法
  12. PPPoE原理和实验
  13. Iterator迭代器遍历Map集合
  14. 无法访问局域网的文件服务器,局域网共享文件夹不能访问
  15. java redis令牌桶_redis实现的简单令牌桶
  16. 七公江湖烤翅防骗子—常见网络骗子骗术防御要点
  17. 《流畅的Python第二版》读书笔记——文本和字节序列
  18. vs2017 调试子进程
  19. linux归档和压缩的区别,文件的归档和压缩
  20. Python期末考试总复习资料

热门文章

  1. 企业网络管理员如何有效封杀QQ
  2. 初、中、高级Java工程师有哪些区别?
  3. 程序员的世界有 10 种人,你是哪一种?
  4. GitHub疯传!北大学霸的LeetCode刷题笔记火了
  5. 少讲大道理,多解决小问题
  6. 《Android 面试指南》
  7. 在微型计算机中r o m是什么,微机原理试题一
  8. fiddler抓包后Jmeter实现登录接口
  9. Qt::FocusPolicy的使用
  10. RESTful Web Services简单介绍