C++ 多态实现原理

简介: C++ 多态实现原理

一、静态多态

函数重载,编译器确定

1.函数重载

  • 允许在同一作用域中声明多个功能类似的同名函数
  • 这些函数的参数列表,参数个数或者参数类型或者参数顺序不一样

注意: 不能通过返回值类型来区别重载

2.原理

  • 函数名修饰
  • 编程过程
    预编译:把头文件当中的函数声明拷贝到源文件,避免编译过程中的语法分析找不到函数定义
    编译:语法分析,同时进行符
    链接号汇总 (函数名)
    汇编:生成函数名到函数地址的映射,方便之后通过函数名找到函数定义位置,从而执行函数
    链接:将多个文件中的符号表汇总合并
  • objdump -t *o
    _ZN+类长度+类名+函数名长度+函数名+E +类型首字母

二、动态多态

虚函数重写,运行时确定

1. 虚函数重写

  • 在基类的函数前加上 virtual 关键字,在派生类重写该函数
  • 运行时将会根据对象的类型来调用相应的函数
  • 如果对象的类型是基类,则调用基类的函数
  • 如果对象的类型是派生类,则调用派生类的函数

2. 原理

  • 早绑定
    编译器编译时已经确定对象调用的函数的地址
  • 晚绑定
    若类使用 virtual 函数,则会为类生成虚函数表(一维数组,存放了虚函数地址),类对象构造时会初始化该虚函数表指针
    虚函数表指针在构造函数中初始化

推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:

零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)

https://xxetb.xet.tech/s/VsFMs


相关文章
|
2月前
|
存储 编译器 数据安全/隐私保护
【C++】多态
多态是面向对象编程中的重要特性,允许通过基类引用调用派生类的具体方法,实现代码的灵活性和扩展性。其核心机制包括虚函数、动态绑定及继承。通过声明虚函数并让派生类重写这些函数,可以在运行时决定具体调用哪个版本的方法。此外,多态还涉及虚函数表(vtable)的使用,其中存储了虚函数的指针,确保调用正确的实现。为了防止资源泄露,基类的析构函数应声明为虚函数。多态的底层实现涉及对象内部的虚函数表指针,指向特定于类的虚函数表,支持动态方法解析。
33 1
|
3月前
|
编译器 C++
C++入门12——详解多态1
C++入门12——详解多态1
52 2
C++入门12——详解多态1
|
3月前
|
C++
C++入门13——详解多态2
C++入门13——详解多态2
89 1
|
5月前
|
存储 编译器 C++
|
6月前
|
存储 编译器 C++
【C++】深度解剖多态(下)
【C++】深度解剖多态(下)
57 1
【C++】深度解剖多态(下)
|
6月前
|
机器学习/深度学习 算法 C++
C++多态崩溃问题之为什么在计算梯度下降时需要除以批次大小(batch size)
C++多态崩溃问题之为什么在计算梯度下降时需要除以批次大小(batch size)
|
6月前
|
Java 编译器 C++
【C++】深度解剖多态(上)
【C++】深度解剖多态(上)
60 2
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
C++多态崩溃问题之在PyTorch中,如何定义一个简单的线性回归模型
C++多态崩溃问题之在PyTorch中,如何定义一个简单的线性回归模型
|
6月前
|
编译器 程序员 C++
【C++高阶】掌握C++多态:探索代码的动态之美
【C++高阶】掌握C++多态:探索代码的动态之美
50 0
|
6月前
|
存储 编译器 C++
C++基础知识(七:多态)
多态是面向对象编程的四大基本原则之一,它让程序能够以统一的接口处理不同的对象类型,从而实现了接口与实现分离,提高了代码的灵活性和复用性。多态主要体现在两个层面:静态多态(编译时多态,如函数重载)和动态多态(运行时多态,主要通过虚函数实现)。