C++虚函数表
2016-04-22 11:08
225 查看
C++ 多态性可分为两类:静态多态和动态多态。函数重载和运算符重载实现的多态属于静态多态,动态多态性是通过虚函数实现的。**
每个含有虚函数的类有一张虚函数表(vtbl),表中每一项是一个虚函数的地址, 也就是说,虚函数表的每一项是一个虚函数的指针。
基类和继承类分别拥有自己的虚函数表
如果有虚函数,则虚函数表占用类内存的首地址
多重继承的情况下,对应基类有多个虚函数表
没有虚函数的C++类,是不会有虚函数表的。
C++类的成员函数不占用内存,所有虚函数占用一个指针内存,用于指向虚函数表
如下两张图说明C++类的成员变量内存、虚函数内存、成员函数内存的分布情况。
每个含有虚函数的类有一张虚函数表(vtbl),表中每一项是一个虚函数的地址, 也就是说,虚函数表的每一项是一个虚函数的指针。
基类和继承类分别拥有自己的虚函数表
如果有虚函数,则虚函数表占用类内存的首地址
多重继承的情况下,对应基类有多个虚函数表
没有虚函数的C++类,是不会有虚函数表的。
C++类的成员函数不占用内存,所有虚函数占用一个指针内存,用于指向虚函数表
如下两张图说明C++类的成员变量内存、虚函数内存、成员函数内存的分布情况。