美文网首页
虚函数实现机制

虚函数实现机制

作者: Temple_Li | 来源:发表于2017-09-12 11:18 被阅读0次

虚函数实现机制:

1、当类中存在虚函数里.则编译器会在编译期自动的给该类生成一个函数表,并在所有该类的对像中放入一个隐式变量vptr,该变量是一个指针变量,它的值指向那个类中的由编译器生成的虚函数表.

2、每个类自己的虚函数入口都在这张表中维护,调用方法的时候会隐式的传入一个this指针,然后系统会根据this指针找到对应的vptr,进而找到对应的虚函数表,找到真正方法的地址,然后才去调用这个方法,这可以叫动态绑定。

3、虚函数表存放重写的虚函数,当基类的指针指向派生类的对象时,调用虚函数时都会根据vptr来选择虚函数,而基类的虚函数在派生类里已经被改写或者说已经不存在了,所以也就只能调用派生类的虚函数版本了.

当调用pBase->show();时,执行的步骤:

1,  判断Base类中show是否为虚函数。

2,  若不是虚函数则找到pBase所指向的对象所属类Base。执行Base::show()。若是虚函数则执行步骤3.

3,  访问pBase所指对象的虚函数表指针得到pBase所指对象所在类的虚函数表。

4,  查找Base中show()在声明时的位序为x,到步骤3得到的虚函数表中找到位序x,从而得到要执行的show的函数地址。

5,  根据函数地址和Base中声明的show的函数类型(形参和返回值)访问地址所指向的函数。

从虚函数的实现机制可以看到要想在子类中实现多态需要满足三个重要的条件。

(1)在基类中函数声明为虚函数。

(2)在子类中,对基类的虚函数进行了重写。

(3)基类的指针指向了子类的对象。

相关文章

  • c++虚函数与虚表初步

    虚指针与虚表 虚表和虚函数是为了实现动态多态的机制,由编译器实现 当一个类本身定义了虚函数,或其父类有虚函数时,编...

  • 虚函数实现机制

    虚函数实现机制: 1、当类中存在虚函数里.则编译器会在编译期自动的给该类生成一个函数表,并在所有该类的对像中放入一...

  • C++ 虚函数表和虚函数指针机制

    虚函数的作用是实现派生类继承基类的接口和一个默认的实现 那么是如何实现这种机制的呢?答案:通过虚函数表和虚函数指针...

  • 关于objc_runtime的消息机制(二)

    接上篇,我们已经大概的聊完了c++的虚函数实现机制。间接寻址体现在虚函数表的实现上。虚函数表由编译负责帮我们维护。...

  • 实现多态必须满足什么条件

    3 虚函数机制 virtual mechanism先看代码: 实现条件: To get polymorphic b...

  • C++ 虚函数

    C++ 虚函数 虚函数 基类中使用virtual关键字声明的函数,称为虚函数。虚函数的实现,通过虚函数表来实现的。...

  • 3.0 C++远征:虚函数与虚析构函数实现原理

    2-7虚函数与虚析构函数实现原理 [TOC] 1.虚函数的实现原理 (1)引入概念:函数指针。 ​ 指向函数的...

  • C++虚函数

    什么是虚函数 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例...

  • C++ 重/难点

    1. 虚函数机制 之 5大问题 (1) 虚成员函数指针 vs. 虚成员函数地址 vtbl 中 的 偏移/数组索引 ...

  • 虚函数

    简介 虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类的函数。例如下...

网友评论

      本文标题:虚函数实现机制

      本文链接:https://www.haomeiwen.com/subject/gmfcsxtx.html