6.3 sizeof(6)
面试例题10:以下代码的输出结果是多少?[美国某著名防毒软件公司2006年面试题]
- class B
- {
- float f;
- char p;
- int adf[3];
- };
- cout << ""<< sizeof(B);
解析:float f占4个字节,char p占1字节,int adf[3]占12字节,总共是17字节。根据内存对齐原则,要选择4的倍数,是20字节。
答案:20
面试例题11:一个空类占多少空间?多重继承的空类呢?[英国某著名计算机图形图像公司面试题]
解析:我们用程序来实现一个空类和一个多重继承的空类。看看它们的大小是多少。代码如下:
- #include <iostream>
- #include <memory.h>
- #include<assert.h>
-
- using namespace std;
- class A
- {
-
- };
- class A2
- {
-
- };
- class B : public A
- {
-
- };
- class C : public virtual B
- {
-
- };
- class D : public A,public A2
- {
-
- };
- int main(int argc,char *argv[])
- {
-
- cout << "sizeof(A): " << sizeof(A)
- << endl;
- cout << "sizeof(B): " << sizeof(B)
- << endl;
- cout << "sizeof(C): " << sizeof(C)
- << endl;
- cout << "sizeof(D): " << sizeof(D)
- << endl;
- return 0;
- }
以上答案分别是:1,1,4,1。这说明空类所占空间为1,单一继承的空类空间也为1,多重继承的空类空间还是1。但是虚继承涉及虚表(虚指针),所以sizeof(C)的大小为4。
答案:一个空类所占空间为1,多重继承的空类所占空间还是1。