面试题答案
一键面试sizeof(Base)
的值- 在C++中,空类
Base
的大小为1字节。这是因为C++标准规定,每个实例化的对象都必须有独一无二的地址,即使是空类,也需要占用一定的空间来保证这个地址的唯一性。所以sizeof(Base) == 1
。
- 在C++中,空类
sizeof(Derived)
的值- 由于
Derived
类继承自Base
类,Derived
类的对象除了自身可能有的成员(在本题中Derived
类也为空类),还包含从Base
类继承来的部分。因为Base
类为空类占1字节,Derived
类自身也没有额外成员,所以sizeof(Derived) == 1
。
- 由于
- 继承关系对空类内存布局产生的影响
- 当一个空类
Derived
继承自另一个空类Base
时,Derived
类的对象在内存中的布局包含了从Base
类继承来的部分。虽然Base
类和Derived
类都没有数据成员,但为了保证对象的唯一性和地址的区分,每个类对象都至少占1字节。从内存布局角度看,Derived
对象的内存空间中至少有1字节用于标识其从Base
类继承的部分(即使这部分没有实际数据)。
- 当一个空类
- 这种影响在实际编程中的意义
- 对象唯一性:确保每个对象都有唯一的内存地址,这在很多情况下是必要的,比如在多态性的实现中,通过对象的地址来区分不同的对象实例,即使是空类对象也需要遵循这个规则。
- 兼容性:在继承体系中,子类对象包含父类对象的部分,这种内存布局方式保证了代码在不同编译器和平台之间的兼容性,使得基于继承的多态、动态绑定等特性能够正确实现。例如,在使用指向父类的指针或引用操作子类对象时,编译器能够根据这种内存布局准确地访问到对象的各个部分。