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

 更新时间:2020年4月25日 17:45  点击:1393

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。

[!--infotagslink--]

相关文章

  • C#虚函数用法实例分析

    这篇文章主要介绍了C#虚函数用法,实例分析了C#中虚函数的功能与基本使用技巧,需要的朋友可以参考下...2020-06-25
  • 浅谈C++ 虚函数

    这篇文章主要介绍了C++ 虚函数的相关资料,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下...2020-09-14
  • 一文读懂C++ 虚函数 virtual

    这篇文章主要介绍了C++ 虚函数 virtual的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-24
  • 解析C++编程中virtual声明的虚函数以及单个继承

    这篇文章主要介绍了C++编程中virtual声明的虚函数以及单个继承,剖析虚函数和单个基类所能够继承的成员,要的朋友可以参考下...2020-04-25
  • 深入解析C++中的虚函数与多态

    对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)和一个指向虚函数表的指针(vptr)来实现的...2020-04-25
  • 详解C++纯虚函数与抽象类

    这篇文章主要介绍了C++纯虚函数与抽象类的相关资料,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下...2020-08-13
  • 虚函数被类的构造析构函数和成员函数调用虚函数的执行过程

    虚函数被类的构造析构函数和成员函数调用虚函数的执行过程,需要的朋友可以参考下...2020-04-25
  • c++中虚函数的实现详解

    众所周知探索c++对象内部的实现是一件非常有趣的事情,虚函数在c++中的实现机制就是用虚表和虚指针,但是具体是怎样的呢?下面这篇文章就来给大家实际检验一下 Visual Studio 2013 编译器在无优化条件下,虚函数的实现。有需要的朋友们可以参考借鉴,下面来一起看看吧。...2020-04-25
  • 详解C++ 多态的实现及原理

    这篇文章主要介绍了C++ 多态的实现及原理,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-04-25
  • 详细分析C++ 多态和虚函数

    这篇文章主要介绍了C++ 多态和虚函数的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-09
  • C++中继承与多态的基础虚函数类详解

    这篇文章主要给大家介绍了关于C++中继承与多态的基础虚函数类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。...2020-04-25
  • 详解C++编程中的虚函数

    这篇文章主要介绍了详解C++编程中的虚函数,包括在什么情况下应当声明虚函数的相关讲解,需要的朋友可以参考下...2020-04-25
  • c#中虚函数的相关使用方法

    若一个实例方法声明前带有virtual关键字,那么这个方法就是虚方法。...2020-06-25
  • c++ 虚函数,虚表相关总结

    这篇文章主要介绍了c++ 虚函数,虚表的的相关资料,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下...2021-03-01
  • C++虚函数及虚函数表简析

    这篇文章主要介绍了C++虚函数及虚函数表,内容非常详细,思路清晰,需要的朋友可以参考下...2020-04-25
  • 构造函数不能声明为虚函数的原因及分析

    构造函数不需要是虚函数,也不允许是虚函数,因为创建一个对象时我们总是要明确指定对象的类型,尽管我们可能通过实验室的基类的指针或引用去访问它但析构却不一定,我们往往通过基类的指针来销毁对象...2020-04-25
  • 聊一聊C++虚函数表的问题

    C++是面向对象的语言(与C语言主要区别),所以C++也拥有多态的特性。下面通过代码看下C++虚函数表的问题,感兴趣的朋友一起看看吧...2021-10-18
  • 简单解读C++中的虚函数

    这篇文章主要介绍了C++中的虚函数,在C++中,虚函数联系到多态、多态联系到继承,因而虚函数是C++中的一大重要特性,需要的朋友可以参考下...2020-04-25
  • 探讨C++中不能声明为虚函数的有哪些函数

    下面小编就为大家带来一篇探讨C++中不能声明为虚函数的有哪些函数。希望对大家有所帮助。一起跟随小编过来看看吧,祝大家游戏愉快哦...2020-04-25
  • C++虚函数的实现机制分析

    这篇文章主要介绍了C++虚函数的实现机制分析,需要的朋友可以参考下...2020-04-25