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

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

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

相关推荐
Wang's Blog4 分钟前
Java 项目实战: 外卖平台优化-YApi接口管理平台与文档导入导出
java·开发语言·yapi
jimy110 分钟前
基类没有虚析构函数,基类指针删除派生类对象,行为是未定义的
开发语言·c++
迅猛龙办公室19 分钟前
python获取星期字符串
开发语言·python
xlq2232241 分钟前
全面复习2
c++
无名猿43 分钟前
移动构造与移动赋值:把资源偷过来
c++·性能优化·内存管理·现代c++·语法基础
泡海椒1 小时前
JQuick-Excel dateFormat 转换实战:日期值与 FORMAT 显示格式的边界
开发语言·python·excel
All for pursuit.1 小时前
【回溯-7】494.目标和
数据结构·c++·算法·leetcode
白杨尚青2 小时前
C++入门篇(十三):vector(上)——动态数组:构造、空间增长与迭代器失效
开发语言·c++·笔记·算法·stl
江江爱编程2 小时前
java零基础保姆级教学01
java·开发语言
沐晓时光2 小时前
C语言入门,深入理解指针(2)
c语言·开发语言