• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++ 纯虚函数,c++虚函数纯虚函数,纯虚函数,纯虚函数的作用,虚函数和纯虚函数等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++之普通成员函数、虚函数以及纯虚函数的区别与用法要点
  • C++中虚函数与纯虚函数的用法
  • c++中虚函数和纯虚函数的作用与区别
  • 虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析
  • c++ 虚函数与纯虚函数的区别(深入分析)

相关文章

  • 2017-05-28C++中输入输出流及文件流操作总结
  • 2017-05-28关于C/C++中可变参数的详细介绍(va_list,va_start,va_arg,va_end)
  • 2017-05-28C++中4种类型转换方式 cast操作详解
  • 2017-05-28CStdioFile的用法详细解析
  • 2017-05-28C语言在屏幕上输出杨辉三角
  • 2017-05-28C++中的auto_ptr智能指针的作用及使用方法详解
  • 2017-05-28C++设计模式编程中Template Method模板方法模式的运用
  • 2022-04-30C语言运算符的优先级和结合性
  • 2017-05-28解析c中stdout与stderr容易忽视的一些细节
  • 2017-05-28C++编写简单的打靶游戏

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++位运算符详解(异或运算符和移位运算符)
    • 基于稀疏图上的Johnson算法的详解
    • C++模板之特化与偏特化详解
    • C/C++函数参数传递机制详解及实例
    • C++实现一维向量旋转算法
    • C++编程中break语句和continue语句的学习教程
    • C读txt到二维数组的实现方法
    • 浅谈几种常见语言的命名空间(Namespace)
    • C++ vector的用法小结
    • 举例讲解C语言程序中对二叉树数据结构的各种遍历方式

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有