C++子类继承了父类
问题描述:
有一个父类,并有两个孩子类继承父类:child1,的child2,我看到了孩子的父类,像这样:C++子类继承了父类
function(Parent *c){
c->someMethod();
}
但孩子有一个child2没有的方法。我尝试添加一个if语句来判断类是否是child1这样的:
function(Parent *c){
if(c->getType() == 'child1'){
c->someMethod();
}
}
,但总会有错误:“类父”已经没有成员名为“的someMethod”所以,如何处理呢?
答
由于您正在使用指向Parent
的指针,因此只能调用Parent
类型所具有的方法。
因此,第一种解决方案是将所有必要的方法放在Parent
类中,并将它们覆盖到子类中。这比下一个更可取。
另一种可能的解决方案是dynamic_cast
Parent
指向必要child
指针,如果你是肯定的,那它在child
指针正确和呼叫方法。这是坏设计的标志,我建议坚持第一个解决方案。
+0
如果你肯定**,比你可以使用'static_cast'。 –
答
试试dynamic_casting它到正确的类型。如果这是不可能的,转换应该返回一个nullptr(或NULL)。
明显的答案是,“你投”。 *正确答案是“你重新访问你的设计,因为它不正确地使用多态性”。 –
[访问者模式](https://en.wikipedia.org/wiki/Visitor_pattern)是可能的重新设计。 – Jarod42