当前位置: 首页 > news >正文

Glass Scienttan

该函数的地址也将被添加到vtbl中(参见图13.5)。注意,无论类中包含的虚函数是1个还是10个,都只
需要在对象中添加1个地址成员,只是表的大小不同而已。

Glass Scienttan

chat tase|4917

wirtaal told sb naelh
irtaal vabd shen _* 1c1:

class Pysbciat : pablio Scientist

ar (saldi4:

vedd shoe allh: Ti redefssea
wartanl vaie shon fietel; rr m

AM

4264

6429

草函数表

业函数表

没有票新组文的函数,重新尼文的函数
Sopbde Fant

Adam Crusher

2096

auclear structure

(新函数)
Seienfist对象具有图藏指計
成及yptr,指料Saiontiai虚
活数表。
Physiciat对家具有:
湖雞指针成员知江,指科
Physicist版函数社

1存找pscSwptr的值:2006.
2.31达2096.
5.寻我表中第2个函数的地址:6820。
4.到达地肚处(6820),执行惠退的函数。

图13.5 虚函数机制

调用虚函数时,程序将查看存储在对象中的vtbl地址,然后转向相应的函数地址表。如果使用类声明
中定义的第一个虚函数,则程序将使用数组中的第一个函数地址,并执行具有该地址的函数。如果使用类
声明中的第三个虚函数,程序将使用地址为数组中第三个元素的函数。
简而言之,使用虚函数时,在内存和执行速度方面有一定的成本,包括:
● 每个对象都将增大,增大量为存储地址的空间。
● 对每个类,编译器都创建一个虚函数地址表(数组)。
● 每个函数调用都需要执行一步额外的操作,即到表中查找地址。
虽然非虚函数的效率比虚函数稍高,但不具备动态联编功能。

13.4.5 有关虚函数注意事项

我们已经讨论了虚函数的一些要点:
● 在基类方法的声明中使用关键字 virtual可使该方法在基类以及所有的派生类(包括从派生类派生
出来的类)中是虚拟的。
● 如果使用指向对象的引用或指针来谓用虚方法,程序将使用为对象类型定义的方法,而不使用为
引用或指针类型定义的方法。这称为动态联编或晚期联编。这种行为非常重要,因为这样基类指
针或引用可以指向派生类对象。
● 如果定义的类将被用作基类,则应将那些要在派生类中重新定义的类方法声明为虚拟的。
对于虚方法,还需要了解其他一些知识,其中有的已经介绍过。下面我们来看一下这些内容。

相关文章:

  • 题记(22)--计算表达式
  • Unity中实现捏脸系统
  • HCIA-HarmonyOS设备开发认证-HarmonyOS简介
  • 大模型学习之书生·浦语大模型6——基于OpenCompass大模型评测
  • 安卓Spinner文字看不清
  • 基于yolov5-master和pyqt5的森林火灾监测软件
  • Webpack5入门到原理2:基本使用
  • System.Data.SqlClient.SqlException:“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误
  • Flash读取数据库中的数据
  • Hovel trump:
  • 第二章第10节:EXCEL :REPLACE函数 SUBSTITUTE函数
  • GPT帮我快速解决工作上的问题案例
  • Vue-Clipboard3:轻松实现复制到粘贴板功能
  • 前端基础:回顾es6相关知识
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • Django 博客开发教程 16 - 统计文章阅读量
  • java正则表式的使用
  • leetcode98. Validate Binary Search Tree
  • MySQL的数据类型
  • SpiderData 2019年2月25日 DApp数据排行榜
  • 好的网址,关于.net 4.0 ,vs 2010
  • 如何使用 JavaScript 解析 URL
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 算法-图和图算法
  • 小而合理的前端理论:rscss和rsjs
  • 原生JS动态加载JS、CSS文件及代码脚本
  • kubernetes资源对象--ingress
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #162 (Div. 2)
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (vue)页面文件上传获取:action地址
  • (层次遍历)104. 二叉树的最大深度
  • (分类)KNN算法- 参数调优
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (转)大型网站架构演变和知识体系
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [20140403]查询是否产生日志
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [Android Pro] AndroidX重构和映射
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [BUG]vscode插件live server无法自动打开浏览器
  • [BZOJ 4598][Sdoi2016]模式字符串
  • [C++] sqlite3_get_table 的使用
  • [DP 训练] Longest Run on a Snowboard, UVa 10285
  • [IE编程] 多页面基于IE内核浏览器的代码示例