【发布时间】:2014-06-27 21:04:07
【问题描述】:
我知道当我们将超类分配给子类时,切片会切断对象的其他子类特定部分,如下所示:
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 部分之外(对应于对象的子类组件)到超级参考?
【问题讨论】:
-
切片是复制的副作用。创建引用不会复制对象。
-
&mySub...那里有错字吗?这是一个地址。 -
“我们将 Super 引用指向 Sub 对象的开头”——这不是真的! (即使我用指针替换引用)指针指向
Sub对象中包含的Super对象的开头。使用多重继承时有一个巨大的区别:指针的值将取决于你转换对象的基类! -
"What is the Slicing Problem inC++",(本页最上面的相关文章)是否不足以描述导致切片的原因?
-
标签: c++ inheritance polymorphism virtual object-slicing