最近在逛B站的时候发现有候捷老师的课程,如获至宝。因此,跟随他的讲解又复习了一遍关于C++的内容,收获也非常的大,对于某些模糊的概念及遗忘的内容又有了更深的认识。
以下内容是关于虚函数表、虚函数指针,而C++中的动态绑定实现和这两个内容是分不开的。
一,虚函数表、虚指针
当一个类在实现的时候,如果存在一个或以上的虚函数时,那么这个类便会包含一张虚函数表。而当一个子类继承并重写了基类的虚函数时,它也会有自己的一张虚函数表。
当我们在设计类的时候,如果把某个函数设置成虚函数时,也就表明我们希望子类在继承的时候能够有自己的实现方式;如果我们明确这个类不会被继承,那么就不应该有虚函数的出现。
下面是某个基类A的实现:
从下图中可以看到该类在内存中的存放形式,对于 虚函数的调用是通过查虚函数表来进行的 ,每个虚函数在虚函数表中都存放着自己的一个地址,而如何在 虚函数表中进行查找,则是通过虚指针来调用 ,在内存结构中它一般都会放在类最开始的地方,而对于普通函数则不需要通过查表操作。这张 虚函数表是 什么时候被创建的呢?它是