晚捆绑的实现过程

咱们一起学C++ 第二百一十四篇之C++虚函数底层实现原理深度剖析 大家好!在C++的学习旅程中,虚函数一直是个神秘又强大的存在。之前我们对虚函数有了一定的了解,今天咱们继续深挖,看看虚函数在底层是如何实现的,一起揭开它的神秘面纱,希望能和大家一起在这个过程中收获新知识,共同进步! 阅读详情

一、函数调用捆绑

1、定义

  捆绑:把函数体与函数调用相联系称为捆绑。当捆绑在程序运行之前(由编译器和连接器)完成时,称为早捆绑。(C编译只有一种函数调用,就是早捆绑)如果捆绑发生在运行时,则称为晚捆绑(或动态捆绑、运行时捆绑。

  虚函数:如果我们在定义基类时在函数前加关键字virtual,则会告诉编译器对于此函数要进行晚捆绑,同时自动安装晚捆绑实现机制。

2、实现

编译器对每个包含虚函数的类创建一个表(称为VTABLE)。在此表中放入特定类的虚函数地址,此外此类中还持有一VPTR指针,指向这个对象的VTABLE。通过基类指针做函数调用时(编译器静态地将子对象的VPTR,这样就能调用正确的函数使晚捆绑实现。

 

#include <typeinfo.h>
#include <iostream.h>

class base {
  public:
      virtual void f() {
          cout << "base-print" << endl;
};

class derived : public base {
 public:
  void f() {
    cout << "derived-print" << endl;
 }
};

void main() {
 base* b;     //(1)
 derived* d = new derived; //(2)

 b = d;        //(3)
 b.f();         //(4)
}

结果:derived-print

 

 

 

 

 

图如下所示:

 

 

 

 


 

 

  

 

咱们一起学C++ 第二百一十三篇之揭开C++虚函数背后的神秘面纱 大家好!C++中的虚函数就像是一个神秘的宝藏,看似难以捉摸,但一旦深入了解,就能发现它强大的功能和魅力。今天咱们就一起深入探索虚函数背后的原理,希望在这个过程中,大家都能收获满满,共同进步! 阅读详情

相关推荐

咱们一起学C++ 第二百一十五篇之C++中虚函数的选择与早捆绑、晚捆绑的奥秘

大家好!在C++的学习过程中,我们不断接触到各种有趣又复杂的概念,今天咱们来深入探讨一下虚函数的选择以及与之紧密相关的早捆绑和晚捆绑机制。我希望通过分享这些知识,能和大家一起进步,让我们在C++编程的道路上走得更稳更远!

wj_rdk的博客 1004

捆绑-王小山

摘自 http://www.bullog.cn/blogs/wangxiaoshan/archives/194283.aspx 在9月24日开出的广州至遵义1291次列车上,疑患狂躁症的贵州籍男子曹大和因为在火车上乱喊乱叫,被列车长和列车员用胶布捆住了手脚。曹大和在挣扎了整个晚上之后,于次日9点多的时候死去(中新网报道)。 几名车上的乘客事后在网上披露了更多细节,一位黄姓乘客说,“(在列车...

行至水穷处 坐看云起时 428

咱们一起学C++ 第二百五十五篇之深入理解C++中的晚捆绑与虚函数机制

大家好!C++作为一门强大的编程语言,其中的许多特性既有趣又实用,但也颇具挑战性。今天咱们就一起深入探索C++中的晚捆绑和虚函数机制,希望在这个学习过程中,我们都能有所收获,共同进步!

wj_rdk的博客 1396

c++晚捆绑的实现机制

早绑定(early binding)是指在实例化对象之前定义它的属性和方法,这样编译器或解释程序就能够提前转换机器代码。 晚绑定(late binding)指的是编译器或解释程序在运行前,不知道对象的类型。使用晚绑定,无需检查对象的类型,只需检查对象是否支持属性和方法即可。 早绑定的优点是: (1) 编译效率 高 (2) ...

weixin_34060299的博客 395

咱们一起学C++ 第二百一十二篇之深入理解C++中的晚捆绑与虚函数机制

大家好!C++作为一门强大的编程语言,其中的许多特性既有趣又实用,但也颇具挑战性。今天咱们就一起深入探索C++中的晚捆绑和虚函数机制,希望在这个学习过程中,我们都能有所收获,共同进步!

wj_rdk的博客 977

C++:晚捆绑测试实例(附完整源码)

C++:晚捆绑测试实例(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 637

早绑定和晚绑定

虚函数和一般函数(早绑定与晚绑定)说早绑定和晚绑定的时候,先来看看绑定的意思吧。绑定的英文名为binding:把函数体和函数调用相联系称为绑定。类中的一般的函数都是早绑定,也就是说:在调用的地方,就已经把要调用的函数确定好了,调用的类就是定义它的类。现在的“向上映射”就会导致早绑定的问题:代码:#include&lt;iostream&gt;using namespace std;class A{...

palawind 2065

JavaScript晚捆绑测试实例(附完整源码)

JavaScript晚捆绑测试实例(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 287

c++早绑定和晚绑定

首先我们先了解下什么叫绑定:    绑定是函数体与函数调用关联起来叫做绑定。早绑定:早绑定发送在程序运行之前,也是编译和链接阶段,类似下面func函数的调用与定义在编译阶段便已经确定,这就叫早绑定void func(){    cout&lt;&lt;"func"&lt;&lt;endl;}int main(){   func();    return 0;}晚绑定:晚绑定发生在程序运行期间,主...

IOT_SHUN的博客 3907

保姆级教程:用北醒TFmini-i-CAN雷达给PixHawk飞控加装‘眼睛’,实现自动避障与定高

经过多次测试,前向雷达的最佳安装位置是机架前部下方5-10cm处,倾斜角度20-30度。电源方面,建议为CAN设备单独供电,避免电机启动时的电压骤降导致数据异常。北醒TFmini-i-CAN雷达与PixHawk飞控的组合,为DIY爱好者打开了低成本实现智能避障的大门。实际部署时,需确保整个CAN网络的波特率一致(TFmini-i默认为250kbps),每个设备具有唯一ID。雷达的安装角度也直接影响检测效果,建议通过3D打印支架将雷达向前下方倾斜15-30度。当使用多个雷达时,需为每个设备创建独立的参数组。

weixin_30892889的博客 337

27-eMMC电路设计

eMMC硬件电路设计

weixin_66510961的博客 4007

[ASP.NET MVC 小牛之路]17 - 捆绑(Bundle)

[ASP.NET MVC 小牛之路]17 - 捆绑(Bundle) 本文介绍 MVC 4 提供的一个新特性:捆绑(Bundle),一个在  View 和 Layout 中用于组织优化浏览器请求的 CSS 和 JavaScript 文件的技术。 本文目录 了解VS默认加入的脚本库 当我们创建一个基本模板的 MVC 工程时,VS在Scripts文件夹中默认加

Litt_J的专栏 1737

用Arduino和MAX30102做个心率血氧仪,从硬件连线到算法调试全流程避坑

本文详细介绍了如何使用Arduino和MAX30102传感器构建高精度心率血氧仪,涵盖硬件连线、软件配置、信号处理及算法优化全流程。通过实战案例和避坑指南,帮助开发者快速实现临床级精度的健康监测设备,适用于可穿戴设备和医疗健康领域。

weixin_26897585的博客 383

c++ 虚函数

一、动态捆绑与虚函数       把函数体与函数调用相联系称为捆绑,当捆绑在程序允许之前(由编译器和连接器)完成时,这称为早捆绑。而在运行时根据对象的类型进行的捆绑被称为晚捆绑,又称为动态捆绑,或运行时捆绑。当一个语言实现晚捆绑时,必须有某种机制来确定运行时对象的类型并调用合适的成员函数,对于一种编译语言,编译器并不知道实际的对象模型,但它插入能找到和调用正确函数体的代码。        对于

西西里的美丽传说 649

Oracle ERP EBS R12 GL总帐业务方案 系统操作

本文档是Oracle ERP系统的总账管理模块使用手册,主要包含以下内容:1.系统架构设计,详细介绍多组织架构、会计科目设置等核心概念;2.总账日常操作流程,包括凭证录入、审核、过账等全流程管理;3.特殊业务处理,涵盖预算控制、内部往来、合并报表等专项功能;4.期末处理,说明月结、年结的操作步骤;5.系统设置指南,提供会计科目表、权限控制等配置说明;6.附录包含各业务模块的分录示例和系统操作图标说明。本手册适用于财务人员学习和使用Oracle ERP总账系统,重点讲解系统功能要点和实操步骤。

anpeng2019的博客 1888

5G 网络的移动性管理上下文对比介绍

5G 网络的移动性管理上下文对比介绍 4G/5G MM移动性管理机制对比 5G引入了新移动性管理状态,通过mobility pattern(移动方式)实现按需的移动性管理等。 MM的相关状态分为一下几种: RM状态(用户注册管理 注册态/非注册态)和CM状态(用户连接态/空闲态)独立;RM状态标识UE是否注册到网络,CM状态标识UE和核心网的信令连接是否存在。 RAN侧引入RRC-inactive state:UE(用户端)对于CN(核心网)而言处于连接态,对RAN(接入网)而言处于Ld..

m0_59032675的博客 4819

C++--问题2--虚函数

C++--问题2--虚函数 1.概念 虚函数:在某基类中声明为 virtual, 并在一个或多个派生类中被重新定义的成员函数。   纯虚函数:是一种特殊的虚函数,使用virtual关键字,并且在其后面加上 =0。   抽象类:在基类中加入至少一个纯虚函数,使基类成为抽象类。 2.为什么要使用虚函数? 答:先了解晚捆绑,捆绑:把函数体与函数调用相联系称为捆绑; 早捆绑:当捆绑在程序运行之前完成时,也就是编译阶段,这称为...

数组越界,数组进栈 178

反制反心理特征的研究

抓牛股

m0_58032574的博客 908

c++ 多态性和虚函数

从新定义了一个基类的重载函数将会隐藏所有该函数的其他基类的版本。d.print();不可以使用。

SYY_LR的博客 526

【清风数学建模笔记】第十一讲:时间序列分析

【清风数学建模笔记】第十一讲:时间序列分析

manerzi的博客 832

STM32Cube高效开发教程<基础篇>(一)----概述

一、 STM32系列器件和开发工具发展历史声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(基础篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。一、 STM32系列器件和开发工具发展历史。

我的博客 187

C++中的多态性(vptr和vtable)

<br />多态性 (polymorphism) 是面向对象编程的基本特征之一。而在C++ 中,多态性通过虚函数 (virtual function) 来实现。我们来看一段简单的代码:<br /><br />#include <iostream><br />using namespace std;<br />class Base{<br />  int a;<br />public:<br />  virtual void fun1() {cout<<"Base::fun1()"<<endl;}<br />

taylor_ttt的专栏 545

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

第1章 对象导言

  实现的重用   代码重用是面向对象程序设计语言的最大优点之一。   重用这个类最简单的方法就是直接使用这个类的对象,并且还可以将这个类的对象放到一个新类的里面。因为这是由已经存在的类组成新类,所以称为组合(或者聚合)。组合常常被称为“has-a(有)”关系,比如“汽车有发动机”一样。组合具有很大的灵活性。   实际上,当创建新类时,程序员应当首先考虑组合...

127

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

多态性 C++思想

当处理类型层次结构时,程序员常常希望不把对象看作是某一特殊类型的成员,而把它看作基本类型成员,这样就可以编写不依赖于特殊类型的代码。在形体例子中,函数可以对一般形体进行操作,而不关心它们是圆、正方形还是三角形。

zhiluan555的专栏 530

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java实现晚捆绑测试实例(附带源码)

java实现晚捆绑测试实例(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1104

咱们一起学C++ 第二百五十八篇之C++中虚函数的选择与早捆绑、晚捆绑的奥秘

大家好!在C++的学习过程中,我们不断接触到各种有趣又复杂的概念,今天咱们来深入探讨一下虚函数的选择以及与之紧密相关的早捆绑和晚捆绑机制。我希望通过分享这些知识,能和大家一起进步,让我们在C++编程的道路上走得更稳更远!

wj_rdk的博客 1584
下一篇: int* p[2] 与 int (*p)[2] 的不同
collision
博客等级 码龄24年 3粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值