码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 虚指针和虚函数表 vptr vtable


    1.虚指针和虚表

    虚函数在c++中的实现机制就是用虚表和虚指针,是每个类用了一个虚表,每个类的对象用了一个虚指针。

    当一个类有虚函数的时候

    这个对象就会多一个指针!

    父类有虚函数,子类一定有,

    把左边的虚指针指向右边的虚函数

    虚指针会指向虚表

    虚表里面放指针会指向虚函数

    编译器看到调用的动作,在过去在C的时代是把它编译成一个特定的语法,call  xxx,xxx某个地址,你要调用哪个函数,编译器就把它解析出来,跳到那个地方去,然后再return 回来。这是调用到固定的地址,call到固定的地址。这就叫静态绑定,但这并不是面向对象的关键点

    现在通过指针来调用虚函数,做动态绑定。动态绑定的逻辑意义是通过一个指针找到vptr,再找到vtable,再找到那个虚函数。

    C++看到一个函数调用会有两个考量,是要把它静态绑定还是动态绑定

    我们要理解的是,静态绑定是编译成什么样子呢,是call xxx

    如果符合某些条件就会产生动态绑定,必须符合三个条件

    第一个是通过指针

    第二个是指针向上转型

    第三个是虚函数

    通过虚机制来动态绑定

    虚函数的这种用法叫做多态!

    一个指针可以表现出多种形态。

    动态绑定就是通过虚指针找到虚表再找到虚函数指针来调用

    虚函数的实现是为每一个对象分配一个vptr指针,而vptr是通过this指针调用的,所以不能为virtual;虚函数的调用关系,this->vptr->ctable->virtual function

    2.多态

    现在我们简单说一下多态,多态分为静态多态和动态多态,静态多态主要指函数重载和泛型编程,动态多态主要就是指虚函数导致的运行时多态吧

  • 相关阅读:
    百度地图 缩放 0.5 zoomend zoom_changed
    基于java+springmvc+mybatis+vue+mysql的班级管理系统
    java计算机毕业设计医院挂号系统源程序+mysql+系统+lw文档+远程调试
    省钱兄短剧短视频小程序是如何运营的?
    存在接口CaichangApplet。定义了蔬菜的生长过程
    Glide源码解析二---into方法
    【C#】rdlc报表答应报错:未能加载文件或程序集“Microsoft.SqlServer.Types
    SpringBoot配置文件及相关配置
    MCU USB设备
    瑞吉外卖优化
  • 原文地址:https://blog.csdn.net/weixin_60630451/article/details/126686994
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号