C++子类扩展父类

Posted

技术标签:

【中文标题】C++子类扩展父类【英文标题】:C++ child class extends the parent class 【发布时间】: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 是可能的重新设计。 【参考方案1】:

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

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

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

【讨论】:

如果您确定,则可以使用static_cast【参考方案2】:

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

【讨论】:

以上是关于C++子类扩展父类的主要内容,如果未能解决你的问题,请参考以下文章

java的父类和子类的关系都有哪些?

关于C++父类与子类之间变量的问题

C++ 当子类的方法和父类的方法重名时...

C++中子类的变量能不能覆盖父类的变量?

C++ 怎样禁止子类重写父类的某个虚函数?

C++中子类从基类都继承啥?