博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
虚函数
阅读量:6247 次
发布时间:2019-06-22

本文共 831 字,大约阅读时间需要 2 分钟。

一、关键点

虚函数:某些成员函数,基类希望它的派生类各自定义适合自身的版本

任何构造函数之外的非static函数都可以是虚函数

关键字virtual只能出现在类内部的声明语句之前而不能用于类外部的函数定义

  • 一旦某个函数被声明成虚函数,则在所有派生类中它都是虚函数
  • 派生类必须在其内部对所有重新定义的虚函数进行声明
  • 一个派生类的虚函数如果覆盖了对应基类的虚函数,则它的形参类型必须与被它的基类函数完全一致;同样,派生类中虚函数的返回类型也必须与基类函数匹配,但该规则有个
  • 派生类如果定义了一个函数与基类中虚函数的名字相同但是形参列表不同,这是合法的,但没有覆盖掉基类中的版本,编译器将认为与基类中的虚函数是相互独立的
  • C++11新标准允许派生类显式地注明其重新定义的虚函数,在形参列表后增加关键字override;如果使用override标记了某个函数,而该函数并没有覆盖已存在的虚函数,此时编译器将报错
  • 我们使用override想表达的意思是,我们希望派生类重新定义的虚函数能覆盖基类中的虚函数,切记只有虚函数能被覆盖
  • 把虚函数指定为final,表示不允许后续的其他类覆盖该虚函数

 

二、虚函数与动态绑定的关系

使用基类的引用或指针调用一个虚成员函数时会执行动态绑定,而通过其他表达式调用虚函数则在编译时就会将调用的版本确定

动态绑定只有当我们通过指针或引用调用虚函数时才会发生

如果虚函数使用了默认实参,那么动态绑定会失效,实参值由调用的静态类型决定

 

超链接:

例外:当类的虚函数返回类型是类本身的指针或引用时,派生类的返回类型可与基类不同,前提是从派生类到基类的类型转换时可访问的

这个函数:我会深究如果只定义了它但没有重新定义虚函数会发生啥?只要它不用override声明就不会报错,该类中的此虚函数版本同基类版本。实际上,我们自己操作不会定义这么一个傻缺函数。

转载于:https://www.cnblogs.com/xzxl/p/7821560.html

你可能感兴趣的文章
Spring Boot几种启动问题的解决方案
查看>>
SpringBlade 2.1 发布,升级为SaaS多租户系统
查看>>
SQL性能优化
查看>>
Go语言基础语法(package)-5
查看>>
Java 程序员必须掌握的 5 个注解!
查看>>
sklearn调包侠之支持向量机
查看>>
源码专题之spring概述
查看>>
CSS box-shadow 详解
查看>>
Openwrt单独编译某一个模块而不是整个固件
查看>>
Python2闭包问题
查看>>
活久见,抄袭竟是重用他人代码没有致谢?
查看>>
laravel框架搭建voyager
查看>>
Go语言之想说的话(原创)
查看>>
Mysql数据库应用--索引(二)
查看>>
python-基于tcp协议的套接字(加强版)及粘包问题
查看>>
ECCV workshop时尚生成竞赛获胜方案详解
查看>>
Selenium IDE HOWTO & 建立的TestSuite如何复用到多个不同的环境?
查看>>
Cause: net.sf.cglib.beans.BulkBeanException异常
查看>>
JavaScript 中 Object.defineProperty 的使用
查看>>
【死磕 Spring】----- IOC 之 获取验证模型
查看>>