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_cast
Parent
指针指向必要的child
指针,如果您确定它是正确的,并在child
指针上调用方法。这是糟糕设计的标志,我建议坚持第一个解决方案。
【讨论】:
如果您确定,则可以使用static_cast
。【参考方案2】:
尝试将其动态转换为正确的类型。如果不可能,则强制转换应返回 nullptr(或 NULL)。
【讨论】:
以上是关于C++子类扩展父类的主要内容,如果未能解决你的问题,请参考以下文章