在C ++中,我有Pass
Pass
Pass
. . .
Pass
Pass
Pass
类。 Parent
,Child1
等继承自其中。类Child2
,Child1
等共享父级的某些方法,并具有自己的方法。
我声明一个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]
能否请您告诉我如何解决此问题?
答案 0 :(得分:4)
OOP解决方案是将虚拟成员函数添加到Parent
,在子项的重写成员函数中实现不同行为,并将BClass::someMethod
的参数更改为{ {1}}指针(或引用),并在其中调用虚函数-或完全摆脱Parent
,并在BClass::someMethod
不再具有其他功能的情况下直接使用虚函数。>
P.S。在裸指针中存储动态分配不是一个好的设计。建议改用智能指针。