虚函数与纯虚函数

简介:

c++

虚函数

  1. 定义:在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数 [1]
  2. 语法:virtual 函数返回类型 函数名(参数表) { 函数体 }
  3. 用途实现多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数,也就是允许子类override父类同名方法。

虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型(也就是完全相同的方法,不能只是函数名相同。)。以实现统一的接口,不同的定义过程。如果在派生类中没有对虚函数重新定义,则它继承其基类的虚函数。

当程序发现虚函数名前的关键字virtual后,会自动将其作为动态联编处理,即在程序运行时动态地选择合适的成员函数。虚函数是C++多态的一种表现。动态联编规定,只能通过指向基类的指针或基类对象的引用来调用虚函数,其格式:
  1. 指向基类的指针变量名->虚函数名(实参表)
  2. 基类对象的引用名. 虚函数名(实参表)
使用虚函数,我们可以灵活的进行动态绑定,当然是以一定的开销为代价。如果父类的函数(方法)根本没有必要或者无法实现,完全要依赖子类去实现的话,可以把此函数(方法)设为 virtual 函数名=0 ,例如: virtual void fun() = 0我们把这样的函数(方法)称为 纯虚函数如果一个类包含了纯虚函数,称此类为抽象类。

总结:如果一个子类想要重写父类的方法,那么父类的这个成员方法必须是virtual的,也就是这个方法必须是虚函数。

java

在java中,所有方法默认就是虚拟的,只要方法不是声明为final类型的,那么肯定就是虚函数,不用为方法显示声明为virtual。在<core java2 :volum I>中提到:"In Java, you do not need to declare a method as virtual. Dynamic binding is the default behavior. If you do not want a method to be virtual, you tag it as final"。所以我们发现,在java中,子类可以重写(override)父类的方法,而父类没有声明virtual。

 

 本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2012/04/12/2444221.html,如需转载请自行联系原作者

目录
相关文章
|
机器学习/深度学习 JSON 前端开发
RESTful API接口设计规范
近年来移动互联网的发展,前端设备层出不穷(手机、平板、桌面电脑、其他专用设备…),因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信,于是RESTful诞生了,它可以通过一套统一的接口为 Web,iOS和Android提供服务。
3945 1
RESTful API接口设计规范
|
12月前
阿里云国际版购买了服务器后如何下载发票?
阿里云国际版购买了服务器后如何下载发票?
|
机器学习/深度学习 人工智能 自然语言处理
机器之心开放人工智能专业词汇集(附Github地址)
作为最早关注人工智能技术的媒体,机器之心在编译国外技术博客、论文、专家观点等内容上已经积累了超过两年多的经验。
935 0
机器之心开放人工智能专业词汇集(附Github地址)
|
算法 Python
利用python实现3种梯度下降算法
利用python实现3种梯度下降算法
706 0
利用python实现3种梯度下降算法
|
存储 前端开发 Java
IDEA 新手入门:创建项目/包/类、运行/关闭/导入项目、字体/字号设置、常用快捷键等使用详解
IDEA 新手入门:创建项目/包/类、运行/关闭/导入项目、字体/字号设置、常用快捷键等使用详解
542 0
IDEA 新手入门:创建项目/包/类、运行/关闭/导入项目、字体/字号设置、常用快捷键等使用详解
|
存储 分布式计算 资源调度
浅谈实时计算
说到实时计算,首先我们需要了解其概念。
807 0
浅谈实时计算
|
监控 安全 机器人
Hunter狩猎者夹子机器人系统开发丨现成案例
区块链系统由无数节点构成,这些节点类似于一台tai.独立工作的计算机,当需要记账的时候,每一个节点都会参与竞争,系统会在一段时间内选出合适的节点来记账,而这个节点就会在数据区块中记录下近期发生的数据变化,记录完成后,节点就会把这个数据区块发送给其他节点,其他节点首先会核实数据,数据无误的话,就会把这个数据区块也放入自己的账本当中,于是系统里的所有节点都拥有一个完全一样的数据区块,即账本。 这种记账方式被称为区块链技术或者分布式总账技术
Hunter狩猎者夹子机器人系统开发丨现成案例
|
存储 弹性计算 运维
带你读《弹性计算—无处不在的算力》第一章:开篇 1.4:弹性计算的技术架构
《弹性计算—无处不在的算力》第一章:开篇 1.4:弹性计算的技术架构
1683 0
带你读《弹性计算—无处不在的算力》第一章:开篇 1.4:弹性计算的技术架构
|
安全 Linux 开发工具
压箱底的8个网站,各种高效工具应有尽有
一年半以来,我分享了很多实用工具。每当看到有同学私信或者评论说“我用了很多你分享的工具,提高了很多工作效率。”
压箱底的8个网站,各种高效工具应有尽有
|
应用服务中间件 网络安全 nginx
keepalived裂脑导致主备无法切换
由于某些原因,导致两台keepalived高可用服务器在指定时间内,无法检测到对方的心跳消息,各自取得资源及服务的所有权,而此时的两台高可用服务器又都还或者。 导致裂脑的原因: ​ 1.服务器网线松动等网络故障 ​ 2.服务器硬件故障发生损坏现象而崩溃 ​ 3.主备都开启firewalld防火墙 ​ 4.Nginx服务器死掉
640 0
keepalived裂脑导致主备无法切换