有好多小问题要问问?
1.
class A
{
public:
A() { }
~A() { }
};
class B ()
{
public:
B() { }
~B() { }
static int a;
};
int B::a = 0;
为何cout<<sizeof(A)<<endl;
cout<<sizeof(B)<<endl;
都为1呢。 A无任何变量为何为1, 而B有一个静态数据成员时也有为1呢。虽然说静态变量
对对象来说为共有的,但他也所于这个类啊,为何看不到他分配的空间呢。 cout<<sizeof(B::a)<<endl; 值为4 为何。。。奇怪1!
而当
class D: public A
{
int i;
};
为什么 sizeof(D)== 4 而不为 5呢?
2.
问题点数:20、回复次数:7Top
1 楼oopig(面向对象的猪)回复于 2003-09-04 01:11:09 得分 15
1.因为A和B中都没有成员变量,按照道理A和B的sizeof都是0,但是为了防止两个不同的对象使用同一个空间地址,规定sizeof必须至少占用一个字节。
2.静态数据成员你可以理解为(实际上也是)全局变量,具有唯一性,和所在类的每个object实例并没有直接关系,所以不影响类的sizeof。
3.sizeof(D) == 4是因为D已经包含了一个int类型的成员变量,每个object的地址空间不会重复,所以不需要多分配那一个字节的占位空间。
Top
2 楼yellowwolf(你们把名给全起了所以我注册色狼)回复于 2003-09-05 21:56:23 得分 0
因为A和B中都没有成员变量,按照道理A和B的sizeof都是0,但是为了防止两个不同的对象使用同一个空间地址,规定sizeof必须至少占用一个字节
不好意思,还是有点不明白这句话?Top
3 楼oopig(面向对象的猪)回复于 2003-09-05 23:29:57 得分 0
假设有两个对象
class A {};
void main()
{
int i = 0;
A a1, a2;
...
}
那么我问你那么&a2和&a1和&i一样吗?如果sizeof(A) == 0,就会出现&a1 == &a2 == &i,你认为这会有什么后果?Top
4 楼fishsward(.)回复于 2003-09-06 01:18:13 得分 0
同意 oopig(面向对象的猪)Top
5 楼noscar(java+Linux)回复于 2003-09-06 01:20:16 得分 0
没有实例!Top
6 楼yndfcd(YNDFCD)回复于 2003-09-06 09:27:06 得分 5
空类作为一个独立的类时大小不加零,如果空类作为其它类的基类,那么它的大小就是0,静态成员的大小不算在类的大小之中,这是C++的规定。
Top
7 楼yellowwolf(你们把名给全起了所以我注册色狼)回复于 2003-09-06 22:01:01 得分 0
首先谢谢上面的兄弟, 我想问一下“面象的猪”
如果sizeof(A) == 0,
不什么会有这样的结果呢? &a1 == &a2 == &i,
如:
int i, j;
sizeof(i) == sizeof(j)啊。
但&i != &j
可能你表达的跟你说的不一样吧。
Top



