- 论坛徽章:
- 0
|
我在这方面也有疑问哦,尝试着回答下,希望能够有帮助!
#include <stdio.h>
#include <stdlib.h>
int main(void){
class A {};
class B : virtual public A {};
class C: public A {};
class D: public B, public C {};
class E: virtual public B, virtual public C {};
printf("sizeof(A) = %d\n",sizeof(A));
//空class,字节数为1,用于标记对象的唯一性,放了一个char
printf("sizeof(B) = %d\n",sizeof(B));
//字节数为4, 放了一个指针,指向虚基类
printf("sizeof(C) = %d\n",sizeof(C));
//空class,同A ,可理解为从A继承了一字节过来
printf("sizeof(D) = %d\n",sizeof(D));
//从B继承了一个虚指针,从C继承了一个字节,总共是5个字节,根据字节对齐,所以为8
printf("sizeof(E) = %d\n",sizeof(E));
//我用dev-c++,结果是8个字节,两个指针指向虚基类,比较好理解。
//vs2005结果为12,我觉得应该是从C处继承过来了一个字节,总共为9个字节,字节对齐,为12
//dev-c++将这个标记字节优化了,而vs没有优化
system("pause");
return 0;
}
|
|
|