【问题标题】:How does C++ compiler know the size of a object with superclassesC++ 编译器如何知道具有超类的对象的大小
【发布时间】:2013-12-23 21:08:48
【问题描述】:

正如问题所述!

假设我有以下sn-p

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 数据保存在某个地方?

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

【问题讨论】:

标签: c++ object superclass


【解决方案1】:

如果您将B 的实例传递给C 构造函数,该构造函数按值接受A,则B 实例将被切片,并且仅保留A 部分。所以:

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

这个。

因此,具体而言,没有办法将C::a 成员转回B 实例,其z 的值与原始B 实例相同-该信息在(不可逆) 切片操作。

【讨论】:

  • 非常感谢!它帮助我成为 C++ 大师:P
【解决方案2】:

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

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

或者也将它的 B 数据保存在某个地方?

没有。

【讨论】:

  • 非常感谢!仍然需要等待 8 分钟才能接受答案:P
猜你喜欢
  • 2015-01-15
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多