虚函数:为了方便使用多态特性,常常需要在基类中定义虚函数。

纯虚函数:

1、原因与虚函数相同;

2、在很多情况下,基类本身生成的对象是不合理的;

虚函数与纯虚函数的区别:

1、类里声明为虚函数的话,这个函数是实现的,哪怕是一个空实现,它的作用就是为了能让这个函数在它的子类里面可以被重载,这样的话,编译器就可以在使用后期绑定来达到多态效果;纯虚函数只是一个接口,是个函数的声明而已,要留在子类里面去实现。

2、虚函数也可以在子类里面不重载;但纯虚函数必须在子类里面去实现。通常我们把很多函数加上virtual,这是一个好的习惯,虽然牺牲了一些性能,但是增加了面向对象的多态性,因为很难预料到父类里面的这个函数不用在子类里面去修改它的实现。

3、虚函数的类用于“实作继承”,继承接口的同时也继承了父类的实现。当然我们也可以完成自己的实现。纯虚函数的类用于“介面继承”,主要用于通信协议方面。关注的是接口的统一性,实现由子类完成。一般来讲,介面类中只有纯虚函数。

4、带纯虚函数的类叫虚基类,这种基类不能直接生成对象,而只有被继承,并重写其虚函数后,才能使用。这样的类也叫抽象类。虚函数是为了继承接口和默认行为;纯虚函数只是继承接口,行为必须重新定义。

转载于:https://www.cnblogs.com/wenxp2006/archive/2012/05/27/2520446.html

虚函数与纯虚函数的区别相关推荐

  1. C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别

    C++ 在继承中虚函数.纯虚函数.普通函数,三者的区别 1.虚函数(impure virtual) C++的虚函数主要作用是"运行时多态",父类中提供虚函数的实现,为子类提供默认的 ...

  2. 虚函数和纯虚函数的区别?

    虚函数和纯虚函数的区别? 虚函数 引入原因 纯虚函数 引入原因 纯虚函数相当于接口,不能直接实例化,需要派生类来实现函数定义. 虚函数在子类里面也可以不重载的:但纯虚必须在子类去实现 一旦父类的成员函 ...

  3. 虚函数与纯虚函数区别

    虚函数为了重载和多态的需要,在基类中是由定义的,即便定义是空,所以子类中可以重写也可以不写基类中的函数! 纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数! 虚函数 引入原 ...

  4. 栈内存 ,堆内存区别 C++ 动态内存 == 与equal区别 复合函数奇偶性 三角函数转换公式: 虚函数和纯虚函数: C++ 中的运算符重载 数据封装,数据抽象 C++ 接口(抽象类

    目录 栈内存 ,堆内存区别 C++ 动态内存 == 与equal区别 复合函数奇偶性 三角函数转换公式: 虚函数和纯虚函数: C++ 中的运算符重载 数据封装,数据抽象 C++ 接口(抽象类): #和 ...

  5. 虚函数和纯虚函数的区别

    首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数. 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数. 定义一个函数为纯虚函数,才代表函数没有被实现. 定义纯虚函数是为了实 ...

  6. C++ 虚函数和纯虚函数的区别

    首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数. 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数. 定义一个函数为纯虚函数,才代表函数没有被实现. 定义纯虚函数是为了实 ...

  7. (转)虚函数和纯虚函数区别

    在面向对象的C++语言中,虚函数(virtual function)是一个非常重要的概念.因为它充分体现 了面向对象思想中的继承和多态性这两大特性,在C++语言里应用极广.比如在微软的MFC类库中,你 ...

  8. C++虚函数和纯虚函数的区别

    1.虚函数和纯虚函数可以定义在同一个类中,含有纯虚函数的类被称为抽象类,而只含有虚函数的类不能被称为抽象类. 2.虚函数可以被直接使用,也可以被子类重载以后,以多态的形式调用,而纯虚函数必须在子类中实 ...

  9. c++ 虚函数,纯虚函数的本质区别

    转载博客:https://mp.weixin.qq.com/s?__biz=MzAxNzYzMTU0Ng==&mid=2651289202&idx=1&sn=431ffd1fa ...

最新文章

  1. [示例]NSDictionary-按value排序数组中的字典并输出(描述器)
  2. python使用箱图法和业务规则进行异常数据处理并检查预测使用的数据特征是否有字段缺失的情况并补齐
  3. 理解WebKit和Chromium: Chromium for Android
  4. 全国计算机二级考试c语言指针,全国计算机二级考试C语言 指针精讲课件.ppt
  5. AcWing - 246. 区间最大公约数(树状数组+线段树)
  6. java heroku_Neo4j Java Rest绑定入门(Heroku部署)
  7. [Leetcode][第632题][JAVA][最小区间][堆][滑动窗口]
  8. 『嗨威说』数据结构 - 第七章学习内容小结
  9. JavaScript开发工具--Aptana
  10. 译者后记 ——《DOOM启示录》读后感(二)
  11. Android性能测试小工具Emmagee
  12. ESP8266 - 首次使用点灯科技
  13. nacos的命名空间
  14. MediaInfo与wmv3 wma3 的解码器
  15. SAP维护币种间汇率前的币种间的汇况比例维护实例
  16. 个人总结之MSP430F5510串口通讯(485)
  17. CV之Face Change:基于人工智能实现国内众多一线美女明星换脸(基于Face++输出4*106个特征点定位+融合代码、deepfake技术)
  18. Windows 8.1中添加美式键盘
  19. 酷q插件开发Java,CQ-HTTP-TO-CQ-FOR-JAVA
  20. windows下mysql 自定义函数 之http 实操

热门文章

  1. 用GrabCut进行前景检测(对书中代码进行改进)Python
  2. rust门卡有什么用_Rust能力养成之(10)用Cargo进行项目管理:扩展 调用与优化
  3. 第二十八讲 解非齐次线性方程组
  4. tomcat启动完成执行 某个方法 定时任务(Spring)
  5. 吴裕雄--天生自然 高等数学学习:多元函数的概念
  6. MyDAL - .IsExistAsync() 使用
  7. 修改anaconda3 jupyter notebook 默认路径
  8. Dijstra算法求最短路径
  9. 使用 pv 命令监控 linux 命令的执行进度
  10. UVa 122 Trees on the level