虚函数 简单介绍

当类中有虚函数的时候,编译器会为类插入一个我们看不见的数据并建立一个表。这个表就是虚函数表(vtbl),那个我们看不见的数据就是指向虚函数表的指针——虚表指针(vptr)。虚函数表就是为了保存类中的虚函数的地址。我们可以把虚函数表理解成一个数组,数组中的每个元素存放的就是类中虚函数的地址。当调用虚函数的时候,程序不是像普通函数那样直接跳到函数的代码处,而是先取出vptr即得到虚函数表的地址,根据这个来到虚函数表里,从这个表里取出该函数的地址,最后调用该函数。所以只要不同类的vptr不同,他对应的vtbl就不同,不同的vtbl装着对应类的虚函数地址,这样虚函数就可以完成它的任务了。

注意:
1、每个类都对应各自的虚函数表。虚函数表是编译器生成的。
2、一般编译器将虚函数指针的位置放在类对象的开始位置。
3、子类继承父类,也会做成自己的虚函数表。即:子类和父类的虚函数指针是不同的。

你可能感兴趣的:(任务,编译器)