简介:
如果一个类中声明有虚函数,大多数编译器就会为这个类创建一个虚函数表(virtual function table)简称虚表(vtab)。
虚表中存放了该类中所有虚函数的地址,虚表属于整个类,不属于某个具体的对象,该类所有对象共享虚表。
当实例化该类对象时,会自动把该类虚表的首地址(简称为 虚指针 vptr)存在该对象中,当使用基类指针/基类引用 调用该虚函数时,大概的过程为:
基类指针/基类引用 -》具体对象 -》虚指针 -》 虚函数表 -》 具体虚函数地址 -》调用虚函数
大概图示如下:

验证代码:
#include <iostream>
using namespace std;
class Parent {
public:
virtual void func1() {
cout << "Parent::func1()" << endl;
}
virtual void func2() {
cout << "Parent::func2()" << endl;
}
private:
int a;
virtual void func3() {

最低0.47元/天 解锁文章
1519

被折叠的 条评论
为什么被折叠?



