使用sizeof计算类的大小

弄得我很晕的东西,不知道哪位高手能解决不?谢谢哈:)给出下面程序的输出并给出理由:
#include<iostream>
#include<string>
#include<fstream>
#include<iomanip>
#include<ctime>
#include<vector>
#include<cstring>
#include<algorithm>

using namespace std;

class V
{
//double a;
public:

virtual void Fun(){}
};
class Iv1:public V{char b;};
class Iv2:public V{char b;};
class Iv3:public V{char b[5];};
class Iv4:public V{};

class R{};
class Ir1:public R{double a;};
class Ir2:public R{};
class Ir3:public R{};
class Ir4:public R{};
class Ir5:public R{};

class I:public Iv1,Iv2,Iv3,Iv4
{
};

class C1{char c1[16];};
class C2{char c2[1];};
class C3{};
class C4{};
class C5{};
class Ir:public Ir1,public Ir2,public Ir3,public Ir4
{
};
class Ic:public C1,public C2,public C3,public C4
{
};
class TestI:public Iv1,public Iv2,public Iv3,public Ir1,public Ir2,public Ir3,public Ir4,public C1,public C2,public C3,public C4,public C5
{
};
void main()
{

cout<<endl<<"sizeof(I):"<<sizeof(I);
//Ic ic;
//cout<<endl<<"sizeof(ic):"<<sizeof(ic);
Ir ir;
cout<<endl<<"sizeof(ir):"<<sizeof(ir);
Ic ic;
cout<<endl<<"sizeof(ic):"<<sizeof(ic);
cout<<endl<<"sizeof(TestI):"<<sizeof(TestI);
}
谢谢各位的回答。
其实struct的对齐我是明白的,我不明白的是:
(1)一个类继承多个空类时,它的各个空的父类对它的大小产生什么样的影响?
(2)如果这些空的父类中的一部分又由一个类派生而来,会不会需要对(1)做什么修正?

类的sizeof大小一般是类中的所有成员的sizeof大小之和,这个就不用多说。
不过有两点需要注意:1)当类中含有虚成员函数的时候,例如:
class B
{
float a;
public:
virtual void fun(void);
}
此时sizeof(B)的大小为8,而不是4。因为在类中隐藏了一个指针,该指针指向虚函数表,正因为如此,
使得C++能够支持多态,即在运行时绑定函数的地址。
2)另一个要注意的是,当类中没有任何成员变量,也没有虚函数的时候,该类的大小是多少呢?
例如:
class B2
{
void fun(void);
}
此时sizeof(B2)的值是多少呢?在C++早期的编译器中,这个值为0;然而当创建这样的对象时,
它们与紧接着它们后面的对象有相同的地址。比如:
B2 b2;
int a;
那么对象b2与变量a有相同的地址,这样的话对对象b2地址的操作就会影响变量a。所以在现在大多数编译器中,该值的大小为1。

如果有虚函数,则sizeof值为类的数据成员的大小加上VTBL(指针,4字节),再加上其基类的数据成员的大小。如果是多重继承,还得加上各基类的VTBL。

这个问题很麻烦.. 下面有更详细的自己看下

http://rkfang.cnblogs.com/archive/2004/10/10/50599.aspx
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-10-05
class 1 2 3 4 5 6 7 8 东南西北中发白 十三幺
第2个回答  2008-10-05
多重继承,太烂了,C++里最烂的东西。

除了这个,以上的都还可以理解。

还有,sizeof如果不用在内存分配上,基本没什么用了。
比如malloc(n*sizeof(t))
又因为C++已经可以用new x[y]这种语法,根本用不上sizeof了
第3个回答  2008-10-06
眼花啊,类的特性很难啊
第4个回答  2008-10-05
这个,楼主太厉害了看的我眼都花了
相似回答