虚函数表

 1 typedef void(*F)();
 2 
 3 class A{
 4 public:
 5     F** vptr;//指向虚函数表的指针,初始化于构造函数
 6     int x=1;
 7     A():vptr((F**)this){}
 8     virtual void f0(){puts("f0");}
 9     virtual void f1(){printf("f1=%d\n",x);}
10 };
11 
12 int main(){
13     A a;
14     a.f0();
15     a.f1();
16 
17     F* vtbl=*a.vptr;//虚函数表,是个数组,数组每个元素是一个函数指针
18     vtbl[0]();//(*a.vptr)[0]();
19     vtbl[1]();//(*a.vptr)[1]();输出x为不确定值,因为没有传入this吗?
20 }

 

posted @ 2017-05-08 10:12  poluner  阅读(110)  评论(0编辑  收藏  举报