(对不起,如果之前有人问这个问题,但我现在搜索了几个小时,找不到任何东西。有人说我想要的是可能的,他告诉我怎么样,我按照他的说法做了这是完全失败。)
首先,这是一个更容易呈现问题的类图。
然后代码没有做我想要的:
int main()
{
Employee jack("Jack", 100);
People guys(jack); // using push_back
...
}
因此,当发生这种情况时,如调试模式所示,伙伴[0]将只有name
,没有salary
。 甚至可以让向量中的对象拥有除name
之外的其他成员吗?或者我唯一的选择是制作Employee
向量?
编辑:Person
顺便说一句是虚拟的。
答案 0 :(得分:4)
向量需要是vector<Person*>
类型(或者更好,是shared_ptr
或unique_ptr
之类的智能指针类型之一)才能执行此操作。否则,Employee
会在添加时{@ 1}}切成正如您所见。
答案 1 :(得分:3)
多态性适用于指针和对基类的引用。您可能没有定义引用向量,但您可以定义指向基类的指针向量。
相对于您的示例向量,人们应该被定义为
std::vector<Person *> people;