【C++】多态 ④ ( 多态实现原理 | C++ 联编概念 | 链接属性 | 内部链接 | 外部链接 | 联编与链接 | 静态联编 | 动态联编 | 联编 与 virtual 关键字 )

文章目录

  • 一、C++ 联编概念
    • 1、联编引入
    • 2、链接属性 ( 内部链接 | 外部链接 )
    • 3、联编 ( C++ 语言 ) 与 链接 ( C 语言 )
    • 4、静态联编
    • 5、动态联编
  • 二、多态实现原理 - 联编 与 virtual 关键字





一、C++ 联编概念




1、联编引入


" 联编 " Linkage 指的是 将 程序模块 和 代码 互相关联的过程 , 将不同源文件中的 同名函数 或 变量 进行链接 ;

在 C++ 语言中 , 每个 函数 或 变量 都有一个 链接属性 , 该链接属性决定了该 函数 或 变量 是否可以在其他源文件中使用 ;


联编 是通过 声明函数或变量 的 链接属性 进行控制 ;

  • 如果一个 函数或变量 具有外部链接属性 , 则可以在其他源文件中使用该函数或变量 ;
  • 如果一个 函数或变量 具有内部链接属性 , 则只能在其所在的源文件中使用该函数或变量。

2、链接属性 ( 内部链接 | 外部链接 )


C++ 中的 链接属性 有两种 : 内部链接 和 外部链接 ;

  • 内部链接 : 使用 static 关键字 声明 函数 或 变量 , 该 函数 或 变量 就具有了 内部链接 属性 ; 具有 内部链接 属性的函数或变量 只能在其所在的源文件中使用 , 不能在其他源文件中使用 ;
  • 外部链接 : 没有使用 static 关键字 声明 函数 或 变量 , 该 函数或变量 就具有了 外部链接 属性 ; 具有 外部链接 属性的函数或变量 可以在其他源文件中使用 , 使用前需要再这些源文件中声明 函数或 变量 ;

3、联编 ( C++ 语言 ) 与 链接 ( C 语言 )


C++中的 联编概念 与 C 语言中的 链接概念 :

  • 链接 : 在 C 语言中 , 链接 是指在 编译时将不同源文件中的函数和变量链接在一起的过程 , 具体指的是 将 二进制的 .o 机器码文件 , 与 .a 静态库 或 .so 动态库 , 拼装成可执行文件 ;
  • 联编 : 在 C++ 中 , 联编 是在编译时进行的 , 即使函数或变量的链接属性为外部链接 , 也需要在其他源文件中进行声明才能使用 ;

C 语言编译过程 参考 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 ) 博客 ;

链接操作 是 将 二进制的 .o 机器码文件 , 与 .a 静态库 或 .so 动态库 , 拼装成可执行文件 ;

在这里插入图片描述


4、静态联编


静态联编 是指在 编译时 确定的 变量 和 函数 的 链接关系 ,

由 编译器 根据 函数和变量的声明 以及它们所在的 源文件 来确定它们之间的 链接关系 ;


在 C++ 语言中 , 所有的 函数和变量 默认都具有 外部链接 属性 ,

因此 , 只要在 不同的源文件 中 声明了相同的函数或变量名 , 就可以在 链接 时将它们 链接 在一起 ;


5、动态联编


" 动态联编 " 是指在 运行时 确定的 链接关系 , 它是由 程序 在 运行时 根据需要 动态地 加载和链接 不同的模块 ;

C++ 语言中 没有 直接支持 动态联编 的特性 , 但可以使用 动态库 技术来实现动态链接 ;

进行 动态链接 时 , 使用 外部链接 属性的 函数或变量名 来 链接 不同的模块 ;


静态联编 和 动态联编 是两种不同的链接方式 , 其 链接时间 和 链接方式 都不同 ;

  • 静态联编 发生在 编译时 ;
  • 动态联编 发生在 运行时 ;




二、多态实现原理 - 联编 与 virtual 关键字



如果 函数前 不使用 virtual 关键字 修饰 , 就是 静态联编 ;

也就是 该 不使用 virtual 关键字 修饰的 函数, 在 编译器 编译阶段 , 就已经确定了 , 如何执行该函数 , 之后就无法修改了 ;


在 " 多态 " 中 , 如果 使用 virtual 关键字 修饰 函数 , 该函数就是 动态联编 ;

在 编译时 , 不确定 执行 哪个函数 ,

在 运行时 , 才确定 要执行 哪个 函数 ;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/215479.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gitea仓库镜像同步至gitlab

1、参考文档:仓库镜像 | Gitea Documentation 2、错误一:账号密码错误问题 解决方法: 出现以上错误为第三步用户名(Oauth2应用名称)或者密码(Gitlab个人访问令牌)错误。 1)如下图1…

Twincat使用:EtherCAT通信扫描硬件设备链接PLC变量

EtherCAT通信采用主从架构,其中一个主站设备负责整个EtherCAT网络的管理和控制,而从站设备则负责在数据环网上传递数据。 主站设备可以是计算机、工控机、PLC等, 而从站设备可以是传感器、执行器、驱动器等。 EL3102:MDP5001_300_CF8D1684;…

msvcp71.dll,msvcr71.dll丢失怎么办?教你如何快速解决此问题

msvcp71.dll是Microsoft Visual C 2003运行库中的一个组件,它是Microsoft Visual C 2003编译的程序在运行时所需要的动态链接库文件。它包含了许多C标准库函数的实现,如字符串处理、数学计算等。当程序运行时,如果缺少这个文件,就…

Linux:gdb调试器的解析+使用(超详细版)

Linux调试器-gdb 背景: 程序的发布方式有两种,debug模式和release模式 debug模式:可以被调试; release模式:不可以被调试。 为什么需要debuy和release这两个模式呢? 答:程序员在开发的时候需要…

electron+vue3全家桶+vite项目搭建【26】electron本地安装Vue Devtool插件,安装浏览器扩展

文章目录 引入获取vue devtool导入插件排除插件的npm脚本最终效果 引入 demo项目地址 Vue Devtools插件是vue项目必备插件,它是安装在浏览器里的,而咱们的electron中实际就包含了一个浏览器,同理它也可以加载浏览器插件 获取vue devtool 直…

哈希表的认识与实现

哈希的概念 可以不经过任何比较,一次直接从表中得到要搜索的元素。如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。 所以当我们设置这种…

深度学习卷积神经网络参数计算难点重点

目录 一、卷积层图像输出尺寸 二、池化层图像输出尺寸 三、全连接层输出尺寸 四、卷积层参数数量 五、全连接层参数数量 六、代码实现与验证 以LeNet5经典模型为例子并且通道数为1 LeNet5网络有7层: ​ 1.第1层:卷积层 ​ 输入:原始的图片像素…

dom api

dom的全称为Document Object Model,即文档对象模型.所谓文档就是html页面,对象就是js里的对象,通过这个模型把页面上的元素和js里的对象关联起来. 下面是关于dom api的一些常用方法 1.获取元素 使用querySelector()方法获取一个元素 使用querySelectorAll()方法获取所有元素 当…

Python基础之中常用的数据类型总结,从入门到入土的python教程之一。

文章目录 Python 中常用的数据类型包括:Python 中布尔类型(bool)Python 中的数字类型概述Pyhon中的字符串概述Python 中的List概述Python 中的元组类型(tuple)Python中的字典(Dictionary)Python中的集合(Set)Python中的…

html幸运大转盘抽奖(附源码)

文章目录 1.设计来源1.1 幸运大转盘 风格11.2 幸运大转盘 风格21.3 幸运大转盘 风格31.4 幸运大转盘 奖品效果1.5 幸运大转盘 活动未开始1.6 幸运大转盘 活动已结束1.7 幸运大转盘 图片源素材 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址&a…

【Web】PhpBypassTrick相关例题wp

目录 ①[NSSCTF 2022 Spring Recruit]babyphp ②[鹤城杯 2021]Middle magic ③[WUSTCTF 2020]朴实无华 ④[SWPUCTF 2022 新生赛]funny_php 明天中期考,先整理些小知识点冷静一下 ①[NSSCTF 2022 Spring Recruit]babyphp payload: a[]1&b1[]1&b2[]2&…

LED驱动控制专用电路

一、基本概述 TM1628是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用IC,内部集成有MCU 数 字接口、数据锁存器、LED 驱动、键盘扫描等电路。本产品质量可靠、稳定性好、抗干扰能力强。 主要适用于家电设备(智能热水器、微波炉、洗衣机、空调…