栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java查漏补缺3

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java查漏补缺3

这里写自定义目录标题
  • Java查漏补缺3
    • 纯虚函数是强制要求子类实现,而虚函数不强制要求子类实现
    • 虚函数与纯虚函数在多态中的区别
    • 何时用虚函数,何时用纯虚函数
    • 对虚函数、纯虚函数的一些分析
    • Java写虚函数无需virtual,啥也不用加。
    • Java写纯虚函数(Java中称为抽象函数),用abstract修饰即可

Java查漏补缺3

C++

  1. 在类成员方法的声明(不是定义)语句前面加个单词:virtual,她就会摇身一变成为虚函数。
  2. 在虚函数的声明语句末尾中加个 =0,她就会摇身一变成为纯虚函数。
  3. 子类可以重新定义基类的虚函数,我们把这个行为称之为复写(override)。
  4. 不管是虚函数还是纯虚函数,基类均可为其提供实现代码(implementation),在这种情况下子类可以调用基类的这些实现。
  5. 子类自主选择是否要提供一份属于自己的个性化虚函数实现。
  6. 子类必须提供一份属于自己的个性化纯虚函数实现。
纯虚函数是强制要求子类实现,而虚函数不强制要求子类实现

纯虚函数,意味着基类强制子类必须提供自己的个性化版本,否则编译将失败。
C++仍然保留了基类提供该纯虚函数代码实现的权利,这也许是给千变万化的实际情况留下后路。

虚函数与纯虚函数在多态中的区别

虚函数和纯虚函数都能做到多态,区别是:子类如果不提供虚函数的实现,那就会自动调用基类的缺省方案。而子类如果不提供纯虚函数的实现,则编译将会失败。基类提供的纯虚函数实现版本,无法通过指向子类对象的基类类型指针或引用来调用,因此不能作为子类相应虚函数的备选方案。

何时用虚函数,何时用纯虚函数
  1. 当基类的某个成员方法,在大多数情形下都应该由子类提供个性化实现,但基类也可以提供一个备选方案的时候,请将其设计为虚函数。
  2. 当基类的某个成员方法,必须由子类提供个性化实现的时候,请将其设计为纯虚函数。
对虚函数、纯虚函数的一些分析

使用一个基类类型的指针或者引用,来指向子类对象(父类指针指向子类对象),进而调用经由子类复写了的个性化的虚函数,这是C++实现多态性的一个最经典的场景。

基类提供的纯虚函数的实现版本,并非为了多态性考虑,因为指向子类对象的基类指针和引用无法调用该版本。纯虚函数在基类中的实现跟多态性无关,它只是提供了一种语法上的便利,在变化多端的应用场景中留有后路。

虚函数和普通的函数实际上是存储在不同的区域的,虚函数所在的区域是可被覆盖(也称复写override)的,每当子类定义相同名称的虚函数时就将原来基类的版本给覆盖了。
另一侧面也说明了为什么基类中声明的虚函数在后代类中不需要另加声明一律自动为虚函数,因为它所存储的位置不会发生改变。 而普通函数的存储区域不会覆盖,每个类都有自己独立的区域,不同类储存区域互不相干。

Java写虚函数无需virtual,啥也不用加。 Java写纯虚函数(Java中称为抽象函数),用abstract修饰即可

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/361394.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号