C ++:覆盖类继承?

时间:2018-08-21 19:01:44

标签: c++ class inheritance

我使用的库中有两个类,让它们分别称为class Aclass B以保持通用性。 Class B继承自class A,因此类似:

class A{
    ...
}

class B: public A{
    ...
}

所以没什么花哨的,但是我不能直接编辑这两个类。现在,我想向类A添加一些功能,因此我将其子类化为myClassA,然后将该功能添加到子类中。当我使用myClassA时,这很好用,但是当然,我使用classB的任何地方仍然继承自原始的class A,而不是myClassA

如何创建从class B继承而不是原始myClassA的{​​{1}}的子类?即使classA已从原始class B继承,只是让子类从myClassAclass B继承都可以吗?

编辑:我刚刚尝试了“从两个继承”选项,并且可以确认它确实有效,至少不是没有更多的工作。评论中提到的钻石问题。因此,除非有一种方法可以使class A覆盖class Bclass A,然后重新实现对myClassA的继承,否则我可能不得不简单地重新实现对我所做的更改class A的子类中的class B的子类,尽管这违反了DRY原理...

编辑2:为使这一点更加具体,例如以标准的“ shape”类示例为例。因此,在这种情况下,您将拥有一个rectangle的基类,并且rectangle被一个square类继承。现在,我要添加功能,例如“移动”功能,该功能将对象的位置移动指定的数量。 rectanglesquare都是相同的,因此理想情况下,我将在rectangle类中实现它,而square将继承它。但是,由于我无权直接访问rectanglesquare类,因此只能使用子类。因此,我希望创建一个继承自 my square子类而不是基类rectangle的{​​{1}}子类。

编辑3:用更具体的例子来重申和澄清问题:“我可以/如何创建rectangle的子类,但可以继承自square({ 1}}子类)是否继承了my_rectange?”或者换句话说,“如果我不能直接修改基类,我可以/如何用自己的东西替换基类?”

1 个答案:

答案 0 :(得分:0)

null

有时,这取决于您在做什么。可以执行或不执行的操作极其精确,问题中没有足够的细节甚至无法了解。

这使myclassA成为派生最多的形式,因此它可以成功覆盖所有虚拟方法。但是,如果您不创建B的实例,它将根本无济于事。