C++编译器如何知道具有超类的对象的大小

How does C++ compiler know the size of a object with superclasses

本文关键字:对象 超类 编译器 何知道 C++      更新时间:2023-10-16

正如问题所述!

假设我有以下片段

class A
{
    int x;
    int y;
}
class B : public A
{
    int z;
}
class C
{
    A a;
    public C(A a) : a(a){}
}

如果我用B类调用C的构造函数,它会复制类中的a部分数据吗?还是把它的B数据保存在某个地方?

提前感谢!这可能是一个愚蠢的问题,但实际上我从未理解。

如果将B的实例传递给按值接受AC构造函数,则B实例将被切片,并且只保留A部分。因此:

它会复制类中的A部分数据吗?

这个。

因此,特别是,无法将C::a成员恢复为B实例,其z的值与原始B实例的值相同——在(不可逆)切片操作期间,信息已丢失。

如果我用B类调用C的构造函数,它会复制类中的a部分数据吗?

是的。这被称为切片-参数是使用A的复制构造函数创建的,该构造函数只复制A子对象。

还是把它的B数据保存在某个地方?

没有。