当我制作父类的载体时,如果我把孩子放在那里,孩子的成员会丢失吗?

时间:2014-05-14 18:46:00

标签: c++ class inheritance vector

(对不起,如果之前有人问这个问题,但我现在搜索了几个小时,找不到任何东西。有人说我想要的是可能的,他告诉我怎么样,我按照他的说法做了这是完全失败。)

首先,这是一个更容易呈现问题的类图。

Class diagram for my problem

然后代码没有做我想要的:

int main()
{
    Employee jack("Jack", 100);
    People guys(jack);             // using push_back 
...
}

因此,当发生这种情况时,如调试模式所示,伙伴[0]将只有name,没有salary甚至可以让向量中的对象拥有除name之外的其他成员吗?或者我唯一的选择是制作Employee向量?

编辑:Person顺便说一句是虚拟的。

2 个答案:

答案 0 :(得分:4)

向量需要是vector<Person*>类型(或者更好,是shared_ptrunique_ptr之类的智能指针类型之一)才能执行此操作。否则,Employee会在添加时{@ 1}}切成正如您所见。

来自莫斯科的弗拉德answer解释了为什么会出现这种情况。

答案 1 :(得分:3)

多态性适用于指针和对基类的引用。您可能没有定义引用向量,但您可以定义指向基类的指针向量。

相对于您的示例向量,人们应该被定义为

std::vector<Person *> people;