两个int
sizeof//8
int a1;//0
int a2;//4
 
两个int+一个虚函数fun1
sizeof//12
(vptr//0)
int a1;//4
int a2;//8
 
两个int+两个虚函数fun1fun2
sizeof//12
(vptr//0)
int a1;//4
int a2;//8
 
vptr定义
void * fun[]={&fun1,&fun2};
const void ** vptr=&fun[0];
vptr只是一个指针,指向一个数组首元素,数组中元素是函数的地址,数组叫做虚函数表
 
两个int+两个虚函数,有两个对象b1b2
b1:
vptr
int a1;
int a2;
 
b2:
vptr
int a1;
int a2;
 
两个对象的vptr都指向同一个数组首元素,数组中元素是函数地址,数组叫做虚函数表
虚函数表在编译时期创建好,只存在一份,定义类对象时,编译器将对象的虚函数指针指向虚函数表
posted on 2021-07-26 14:54  offer快到碗里来~  阅读(164)  评论(0)    收藏  举报