为什么我不能使用堆栈上创建的对象进行向上转换?

时间:2014-08-13 16:39:54

标签: c++ object upcasting

这是否是一个上流?如果没有,请说明原因。提前谢谢。

C ++代码:

Base base;
Derived derived;
base = derived; // is this the upcast? 

2 个答案:

答案 0 :(得分:4)

不,因为您没有指定指针或引用,您尝试分配实际实例。也就是说,您尝试将derived的内容复制到base存在的内存中。你最终会得到的是切片,只复制Base derived部分的内容。

这应该包含在任何体面的C ++书中。

答案 1 :(得分:1)

不是。

隐含的#34; upcast"可能有点像

Derived derived;
Base& base = derived;

请注意,Base&不是另一个Base对象,而是引用到其他Basederived中包含的<}} < / p>

你所做的,实际上是创建另一个 基础并在其中复制派生的基础子组件

这仍然需要隐式上传,但从那时起,basederived不再相关