C++ vptr vtbl (C++虚表指针,虚函数表,虚函数的实现)
#include <iostream>
class A {
virtual void a()=0;
virtual void b()=0;
};
class A1 : public A {
virtual void a(){ std::cout<< "A1::a()" << std::endl; }
virtual void b(){ std::cout<< "A1::b()" << std::endl; }
};
class A2 : public A {
virtual void a(){ std::cout<< "A2::a()" << std::endl; }
virtual void b(){ std::cout<< "A2::b()" << std::endl; }
};
typedef void (*F)();
int main()
{
A1 a1;
int* vptr = (int*)(&a1);
int* vtbl = (int*)(*vptr);
// 1.每个对象所在地址开始四个字节内存为vptr
// 2.vptr内存中的内容为vtbl所在地址(vptr指向vtbl)
// 3.vtbl中每四个字节保存着成员函数地址(vtbl每项指向成员函数)
F a1_f1 = (F)*(vtbl + 0);
F a1_f2 = (F)*(vtbl + 1);
a1_f1();
a1_f2();
A2 a2;
vptr = (int*)(&a2);
vtbl = (int*)(*vptr);
F a2_f1= (F)*(vtbl + 0);
F a2_f2= (F)*(vtbl + 1);
a2_f1();
a2_f2();
}
http://blog.csdn.net/haoel/article/details/1948051

浙公网安备 33010602011771号