首页 > 试题广场 >

有以下一段代码:classA{public:A(){}~A(

[单选题]

有以下一段代码:

class A
{
public:
    A() {}
    ~A() {}
};
class B : public A
{
public:
    B() {}
    ~B() {}
public:
    int a;
};

若:x=sizeof(A),y=sizeof(B),请问xy的值分别是多少?

  • x=0,y=4
  • x=1,y=4
  • x=1,y=5
  • x=4,y=8
空类中编译器插入一个char类型,用来标识这个class不同实体在内存中配置独一无二地址,故空类大小1字节
发表于 2020-09-11 10:42:42 回复(1)

class A中只有两个非virtual函数,因此class A的object为空(非virtual函数并不放在对象中)。但是这个空对象中有一个隐藏的1byte大小,那是被编译器安***去的一个char。这使得这一class的两个objects得以在内存中配置独一无二的地址。因此sizeof(A) = 1

而class B有一个int型的数据成员a,为4字节,因为有了成员,就不需要为了空class A而安插一个char。因此sizeof(B) = 4(安排的1bytes不过是为了让每个对象都有一个独一无二的地址,现在class B object中已经有了数据成员a了,没必要再额外添加1bytes)

发表于 2022-03-13 11:01:42 回复(3)
<p>空类中编译器插入一个char类型,用来标识这个class不同实体在内存中配置独一无二地址,故空类大小1字节</p>
发表于 2020-08-22 14:48:17 回复(0)
<p>一个空类型,sizeof 是1字节,一个整型变量的大小为4个字节</p>
发表于 2020-08-07 18:52:02 回复(0)
空类中编译器会插入一个char,占一个字节
发表于 2023-07-16 23:17:12 回复(0)
空类的sizeof为1,普通的成员函数是不算空间的,但是如果有虚函数,会有一个虚指针的大小,但是只会有一个虚指针。
发表于 2023-07-11 13:51:46 回复(0)
空类中编译器插入一个char类型,用来标识这个class不同实体在内存中配置独一无二地址,故空类大小1字节
发表于 2020-11-28 12:25:23 回复(0)