有一个父类,并且有两个子类扩展父类:child1,child2,我将子视图看作父类,如下所示:
function(Parent *c){
c->someMethod();
}
Run Code Online (Sandbox Code Playgroud)
但是孩子有一种child2没有的方法.我尝试添加一个if语句来判断该类是否为child1,如下所示:
function(Parent *c){
if(c->getType() == 'child1'){
c->someMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
但是出现了错误:'class Parent'没有名为'someMethod'的成员,那么,如何处理呢?
由于您正在使用指针Parent,因此您只能调用Parent类型具有的方法.
因此,第一个解决方案是将所有必要的方法放在Parent类中,并在子类中覆盖它们.这比下一个要好得多.
另一个可能的解决方案是dynamic_cast Parent指向必要的child指针,如果你确定,它是正确的child指针和指针调用方法.这是糟糕设计的标志,我建议坚持第一个解决方案.