gpt4 book ai didi

c++ - 为什么切片会准确发生?

转载 作者:行者123 更新时间:2023-11-30 01:52:30 25 4
gpt4 key购买 nike

我的理解是,当我们将父类(super class)分配给子类时,切片会切掉对象的其他特定于子类的部分,如下所示:

Sub mySub;
Super mySuper = &mySub;
// mySuper DOESN'T contain any sub class behaviour

如果我们这样做了:

Sub mySub;
Super& mySuper = &mySub;
// mySuper DOES contain the sub class behaviour

但我不明白为什么引用有效而对象为什么无效。

我已经看到原因是因为没有引用需要复制对象 - 但我仍然不明白为什么这会导致切片?

我也不明白为什么引用有效。我们将 Super 引用指向 Sub 对象的开头,但编译器知道 super 对象应该有多大,所以我不希望关联超出 Super 部分的内存(对应于对象的子类组件) super 引用?

最佳答案

Super mySuper = mySub;

在这种情况下,会实例化一个新对象并调用复制构造函数。新对象不包含任何额外内容是合理的。

Super& mySuper = mySub;

在这种情况下,您设置了对该对象的引用。引用就像一个指针,它不知道对象有多大。只有它引用了什么样的对象以及它在内存中的位置。根据哪些类“Sub”派生自 mySuper 的地址可能与 mySub 的地址不同。您可以通过使用指针并打印它们的值来轻松地进行尝试。虽然引用本身只知道对象“ super ”部分的位置,但您可以强制转换;编译器知道在哪里可以找到“Sub”对象的其余部分,如果它真的是一个的话。

关于c++ - 为什么切片会准确发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24460755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com