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

2 c++ object superclass

正如问题所述!

假设我有以下代码段

class A
{
    int x;
    int y;
}

class B : public A
{
    int z;
}

class C
{
    A a;

    public C(A a) : a(a){}
}
Run Code Online (Sandbox Code Playgroud)

如果我用B类调用C的构造函数会发生什么,它会复制它在类中的部分数据吗?或者还保留它的B数据?

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

San*_*ker 5

如果将实例传递BC带有Aby值的构造函数,则B实例将被切片,只剩下该A部分.所以:

它会复制它在课堂上的部分数据吗?

这个.

因此,具体而言,无法将C::a成员转换回Bz原始B实例具有相同值的实例 - 该信息在(不可逆)切片操作期间已丢失.