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

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

  • 当类里面定义虚函数,在编译阶段,会创建一个虚函数表,通过虚函数表指针进行指向。虚函数表内分别存储了,&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

相关推荐
零二年的冬4 分钟前
epoll详解
java·linux·开发语言·c++·链表
凭君语未可11 分钟前
Java 中的接口是什么
java·开发语言
XiYang-DING12 分钟前
【Java】二叉树
java·开发语言·数据结构
坚持编程的菜鸟12 分钟前
The Blocks Problem
数据结构·c++·算法
tankeven13 分钟前
HJ171 排座椅
c++·算法
下北沢美食家22 分钟前
JavaScript面试题2
开发语言·javascript·ecmascript
6Hzlia23 分钟前
【Hot 100 刷题计划】 LeetCode 39. 组合总和 | C++ 回溯算法与 startIndex 剪枝
c++·算法·leetcode
宵时待雨38 分钟前
优选算法专题1:双指针
数据结构·c++·笔记·算法·leetcode
程序员学习随笔40 分钟前
深入剖析 std::optional:实现原理、性能优化与安全编程实践
c++·安全·空值
数据知道43 分钟前
claw-code 源码分析:大型移植的测试哲学——如何用 unittest 门禁守住「诚实未完成」的口碑?
开发语言·python·ai·claude code·claw code