虚函数静态绑定与动态绑定

虚函数静态绑定与动态绑定

  • 当类里面定义虚函数,在编译阶段,会创建一个虚函数表,通过虚函数表指针进行指向。虚函数表内分别存储了,&RTTI信息,偏移量(一般为0),定义的虚函数地址
  • 同一个类定义的不同对象的虚函数指针指向同一个虚函数表
  • 当派生类继承某一个定义虚函数的基类时,同时也会创建一个定义虚函数表的虚函数指针。当派生类重写了某个虚函数,那么虚函数表里面的函数地址会进行更新成自定义的函数地址。
cpp 复制代码
#include <iostream>

using namespace std;
class Base {
public:
    Base(int data) : ma_(data) {}
    virtual void show() { cout << "Base::show()" << endl; }
    void show(int) { cout << "Base::show(int)" << endl; }
protected:
    int ma_;
};

class Drived : public Base {
public: 
    Drived(int data):Base(data), mb_(data){}
    void show() { cout << "Drived::show()" << endl; }
private:
    int mb_;
};

int main()
{
    Drived d(10);
    Base* p = &d;
}

编译器发现,void show()为普通函数就进行静态绑定 ,要是为虚函数就进行动态绑定要是Base里面没有虚函数,那么*p就是Base就是识别为Base类型;要是Base里面有虚函数,那么就通过虚函数指针里面的&RTTI信息进行识别Drived

相关推荐
云和数据.ChenGuang7 分钟前
Python 3.14 与 PyCharm 2025.2.1 的调试器(PyDev)存在兼容性问题
开发语言·python·pycharm
Q741_14718 分钟前
C++ 面试高频考点 链表 迭代 递归 力扣 25. K 个一组翻转链表 每日一题 题解
c++·算法·链表·面试·递归·迭代
syker33 分钟前
手搓UEFI.h
c++
Mr.Jessy43 分钟前
Web APIs 学习第六天:BOM、location对象与本地存储
开发语言·前端·javascript·学习·web api·bom
LIZhang20161 小时前
基于ffmpeg8.0录制mp4文件
开发语言·c++
_OP_CHEN1 小时前
C++进阶:(九)深度剖析unordered_map 与 unordered_set容器
开发语言·c++·stl容器·哈希表·哈希桶·unordered_map·unordered_set
七夜zippoe1 小时前
Java并发编程基石:深入理解JMM(Java内存模型)与Happens-Before规则
java·开发语言·spring·jmm·happens-before
Mark Studio1 小时前
QT linux 静态编译问题记录
开发语言·qt
freedom_1024_2 小时前
LRU缓存淘汰算法详解与C++实现
c++·算法·缓存
无敌最俊朗@2 小时前
C++-Qt-音视频-基础问题01
开发语言·c++