为什么C++的多态性不起作用?

为什么C++的多态性不起作用?,c++,polymorphism,C++,Polymorphism,我不明白为什么这个遗产不起作用。我有以下设置: struct Shape{} struct Stain : Shape {} 现在,为什么我不能执行以下操作: vector<Shape> shapes; Stain stain(); shapes.push_back(stain); 我认为这是可行的,因为染色是形状的一个子类,所以我应该能够把染色放到向量中?或者这是概念上的错误,我想做的事情确实不可能?C++中的多态性 需要引用语义。实现这一点的最简单方法是std::vector

我不明白为什么这个遗产不起作用。我有以下设置:

struct Shape{}
struct Stain : Shape {}
现在,为什么我不能执行以下操作:

vector<Shape> shapes;
Stain stain();
shapes.push_back(stain);

我认为这是可行的,因为染色是形状的一个子类,所以我应该能够把染色放到向量中?或者这是概念上的错误,我想做的事情确实不可能?C++中的多态性

需要引用语义。实现这一点的最简单方法是std::vector

或者,如果你想复制你的形状,看看价值观。许多实现还允许COW写时复制。基本上,在几乎所有的用途中,它都与值一样工作,例如,它的副本会复制它所持有并分配的值


<> P>一个明显的变化是,你不能再把你的向量当作一个POD记忆块了。C++中多态性的< /P> < P>你需要参考语义学。实现这一点的最简单方法是std::vector

或者,如果你想复制你的形状,看看价值观。许多实现还允许COW写时复制。基本上,在几乎所有的用途中,它都与值一样工作,例如,它的副本会复制它所持有并分配的值


明显的变化是,您不能再将向量视为POD内存块。

为什么您的特定代码无法生成,请查找最烦人的解析。简言之,污点是一种功能:放下污点,使其成为物体。然后,查找对象切片,找出为什么它不能达到预期效果。这是错误的。像这样定义的向量是存储实际值,所以你的污点会被截断。为了获得C++中的多态性,你需要使用引用或指针。另外,当你把污点推回一个形状为s的向量时,你将得到切片。也就是说,污点被残忍地削减到形状的大小,这并不好。为什么你的特定代码不能构建,请查找最令人烦恼的解析。简言之,污点是一种功能:放下污点,使其成为物体。然后,查找对象切片,找出为什么它不能达到预期效果。这是错误的。像这样定义的向量是存储实际值,所以你的污点会被截断。为了获得C++中的多态性,你需要使用引用或指针。另外,当你把污点推回一个形状为s的向量时,你将得到切片。也就是说,污点被残忍地削减到形状的大小,这并不好。在哪里可以找到boost的价值实现?我猜它藏在某个不相关的图书馆里?@juanchopanza在谷歌上快速搜索表明他们不会直接公开它。我想我会对它进行一些编辑以避免混淆。在哪里可以找到boost对value_ptr的实现?我猜它藏在某个不相关的图书馆里?@juanchopanza在谷歌上快速搜索表明他们不会直接公开它。我想我会稍微编辑一下以避免混淆。