关于c ++:当我创建父类的向量时,如果我把孩子放在那里,孩子的成员会丢失吗?

When I make a vector of a parent class, if I put a child there, child's members will be lost?

本问题已经有最佳答案,请猛点这里访问。

(如果以前在这里问过这个问题,我很抱歉,但现在我搜索了几个小时,找不到任何问题。有人说我想要的是可能的,他告诉我,我是怎么做到的,正如他所说的,但这完全是失败的。)

首先,这里是一个类关系图,用于更轻松地表示问题。

Class diagram for my problem

那么不做我想做的事情的代码:

1
2
3
4
5
6
int main()
{
    Employee jack("Jack", 100);
    People guys(jack);             // using push_back
...
}

因此,当发生这种情况时,正如调试模式所示,伙计们[0]将只有一个name,没有salary。向量中的一个对象是否可能有除name以外的其他成员?或者我唯一的选择是做一个Employee向量?

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


矢量的类型必须是vector(或者更好的是,像shared_ptrunique_ptr这样的智能指针类型之一),才能做到这一点。否则,如您所见,当添加时,Employee将被切成一个Person

莫斯科答案中的弗拉德解释了为什么会这样。


多态性与指向基类的指针和引用一起工作。不能定义引用的向量,但可以定义指向基类的指针的向量。

相对于你的例子,矢量人应该被定义为

1
std::vector<Person *> people;