c ++将vector <parent *>的元素传递到需要儿童的对象的方法中

时间:2019-02-28 17:45:16

标签: c++ inheritance vector

在C ++中,我有Pass Pass Pass . . . Pass Pass Pass 类。 ParentChild1等继承自其中。类Child2Child1等共享父级的某些方法,并具有自己的方法。

我声明一个Child2可以添加vector的任何子代。

Parent

根据孩子的不同,我想为vector<Parent*> v = {new Child1(), new Child2(),...}; BClass::someMethod(Child1* child) ...的方法定义不同的行为...类似 Visitor模式。问题是我必须将BClass::someMethod(Child2* child)向量的元素传递到v中,并且编译器说,例如,当传递BClass::someMethod(...)时对于方法BClass::someMethod(Child1* c1)

v[0]

能否请您告诉我如何解决此问题?

1 个答案:

答案 0 :(得分:4)

OOP解决方案是将虚拟成员函数添加到Parent,在子项的重写成员函数中实现不同行为,并将BClass::someMethod的参数更改为{ {1}}指针(或引用),并在其中调用虚函数-或完全摆脱Parent,并在BClass::someMethod不再具有其他功能的情况下直接使用虚函数。


P.S。在裸指针中存储动态分配不是一个好的设计。建议改用智能指针。