有一个父类,并且有两个子类扩展了父类:child1,child2,我将子视图看作父类,如下所示:
function(Parent *c){
c->someMethod();
}
但是孩子有一种child2没有的方法。我尝试添加一个if语句来判断该类是否为child1,如下所示:
function(Parent *c){
if(c->getType() == 'child1'){
c->someMethod();
}
}
但是出现了错误:' class Parent'没有名为' someMethod'那么,如何应对呢?
答案 0 :(得分:5)
由于您正在使用指向Parent
的指针,因此您只能调用Parent
类型具有的方法。
因此,第一个解决方案是将所有必要的方法放在Parent
类中,并在子类中覆盖它们。这比下一个要好得多。
另一种可能的解决方案是dynamic_cast
Parent
指向必要的child
指针,如果您确定,它是正确的,并且child
上的调用方法指针。这是糟糕设计的标志,我建议坚持第一个解决方案。
答案 1 :(得分:0)
尝试将其动态广播为正确的类型。如果不可能,则强制转换应返回nullptr(或NULL)。