【问题标题】:C++ child class extends the parent classC++子类扩展父类
【发布时间】:2016-11-28 12:50:19
【问题描述】:

有一个父类,有两个子类扩展父类:child1,child2,我把子类看成父类,像这样:

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

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

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

但是出现了错误:'class Parent'没有名为'someMethod'的成员,那么,如何处理呢?

【问题讨论】:

  • 显而易见的答案是“你投”。 正确的答案是,“你重新审视你的设计,因为它错误地使用了多态性”。
  • Visitor pattern 是可能的重新设计。

标签: c++


【解决方案1】:

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

所以,第一个解决方案是将所有必要的方法放在Parent 类中,并在子类中覆盖它们。这比下一个要好得多。

另一种可能的解决方案是将dynamic_castParent 指针指向必要的child 指针,如果您确定它是正确的,并在child 指针上调用方法。这是糟糕设计的标志,我建议坚持第一个解决方案。

【讨论】:

  • 如果您确定,则可以使用static_cast
【解决方案2】:

尝试将其动态转换为正确的类型。如果不可能,则强制转换应返回 nullptr(或 NULL)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 2020-01-11
    • 2022-12-15
    相关资源
    最近更新 更多