C++中虚函数工作原理和(虚)继承类的内存占用大小计算-1
上一篇 /
下一篇 2012-08-21 09:25:46
/ 个人分类:C++
9L:A lW bT%L7i0 一、虚函数的工作原理51Testing软件测试网&Vw w)m_5\l]1?o{
%_zH.e,Rw6x
]0
每当创建一个包含有虚函数的类或从包含有虚函数的类派生一个类时,编译器就会为这个类创建一个虚函数表(VTABLE)保存该类所有虚函数的地址,其实
这个VTABLE的作用就是保存自己类中所有虚函数的地址,可以把VTABLE形象地看成一个函数指针数组,这个数组的每个元素存放的就是虚函数的地址。
在每个带有虚函数的类 中,编译器秘密地置入一指针,称为vpointer(缩写为VPTR),指向这个对象的VTABLE。
当构造该派生类对象时,其成员VPTR被初始化指向该派生类的VTABLE。所以可以认为VTABLE是该类的所有对象共有的,在定义该类时被初始化;而
VPTR则是每个类对象都有独立一份的,且在该类对象被构造时被初始化。
6sJX/pQ0[
|8u0Sfh"L'Lz1d5W0 通过基类指针做虚函数调
用时(也就是做多态调用时),编译器静态地插入取得这个VPTR,并在VTABLE表中查找函数地址的代码,这样就能调用正确的函数使晚捆绑发生。为每个
类设置VTABLE、初始化VPTR、为虚函数调用插入代码,所有这些都是自动发生的,所以我们不必担心这些。
s};`#W.Gj0.k
dt*aQ0#include<iostream>
OZ
GX/w(]fz0using namespace std;51Testing软件测试网%M5Gs0bqi
}^ H q
|