C++子类继承了父类

C++子类继承了父类

问题描述:

有一个父类,并有两个孩子类继承父类:child1,的child2,我看到了孩子的父类,像这样:C++子类继承了父类

function(Parent *c){ 
    c->someMethod(); 
} 

但孩子有一个child2没有的方法。我尝试添加一个if语句来判断类是否是child1这样的:

function(Parent *c){ 
    if(c->getType() == 'child1'){ 
    c->someMethod(); 
    } 
} 

,但总会有错误:“类父”已经没有成员名为“的someMethod”所以,如何处理呢?

+9

明显的答案是,“你投”。 *正确答案是“你重新访问你的设计,因为它不正确地使用多态性”。 –

+0

[访问者模式](https://en.wikipedia.org/wiki/Visitor_pattern)是可能的重新设计。 – Jarod42

由于您正在使用指向Parent的指针,因此只能调用Parent类型所具有的方法。

因此,第一种解决方案是将所有必要的方法放在Parent类中,并将它们覆盖到子类中。这比下一个更可取。

另一种可能的解决方案是dynamic_castParent指向必要child指针,如果你是肯定的,那它在child指针正确和呼叫方法。这是坏设计的标志,我建议坚持第一个解决方案。

+0

如果你肯定**,比你可以使用'static_cast'。 –

试试dynamic_casting它到正确的类型。如果这是不可能的,转换应该返回一个nullptr(或NULL)。