虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析

 更新时间:2013年06月04日 11:12:03   作者:  
本篇文章是对虚函数与纯虚函数进行了详细的分析介绍,需要的朋友参考下

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。

相关文章

  • 使用C语言实现珠玑妙算Mastermind小游戏

    使用C语言实现珠玑妙算Mastermind小游戏

    这篇文章主要介绍了使用C语言实现珠玑妙算Mastermind小游戏,这是一款益智类多人游戏游戏,非常有趣,需要的朋友可以参考下
    2023-03-03
  • C++ 先对数组排序,在进行折半查找

    C++ 先对数组排序,在进行折半查找

    以下小编就为大家介绍两种实现方法。第一种方法是,选择排序法+循环折半查找法。第二种方法是,冒泡排序法+递归折半查找法。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • C++使用函数的一些高级操作指南

    C++使用函数的一些高级操作指南

    C++中函数调用的方法与C语言并无区别,依旧是在调用方函数中执行函数调用语句来实现函数调用,下面这篇文章主要给大家介绍了关于C++使用函数的一些高级操作,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • Qt编写秒表功能

    Qt编写秒表功能

    这篇文章主要为大家详细介绍了Qt编写秒表功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 浅谈MFC 改变控件大小和位置

    浅谈MFC 改变控件大小和位置

    在用VC开发应用程序时,经常会要做一些可以改变大小的对话框,而这个时候就要求对话框上的控件会随着对话框大小的改变而改变自己的位置和大小。下面我们就来探讨下在MFC中如何改变控件大小和位置
    2015-06-06
  • Qt线程QThread开启和安全退出的实现

    Qt线程QThread开启和安全退出的实现

    本文主要介绍了Qt线程QThread开启和安全退出的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • C语言实现简易扑克牌游戏

    C语言实现简易扑克牌游戏

    这篇文章主要为大家详细介绍了C语言实现简易扑克牌游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • C++判断一个点是否在圆内的方法

    C++判断一个点是否在圆内的方法

    这篇文章主要为大家详细介绍了C++判断一个点是否在圆内的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • C++实现自顶向下的归并排序算法

    C++实现自顶向下的归并排序算法

    这篇文章主要介绍了C++实现自顶向下的归并排序算法,结合实例详细分析了自顶向下的归并排序算法的原理与具体实现步骤,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-12-12
  • C++求斐波那契数的实例代码

    C++求斐波那契数的实例代码

    这篇文章介绍了C++求斐波那契数的实例代码,有需要的朋友可以参考一下
    2013-10-10

最新评论