我使用的库中有两个类,让它们分别称为class A
和class 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
继承,只是让子类从myClassA
和class B
继承都可以吗?
编辑:我刚刚尝试了“从两个继承”选项,并且可以确认它确实不有效,至少不是没有更多的工作。评论中提到的钻石问题。因此,除非有一种方法可以使class A
覆盖class B
和class A
,然后重新实现对myClassA
的继承,否则我可能不得不简单地重新实现对我所做的更改class A
的子类中的class B
的子类,尽管这违反了DRY原理...
编辑2:为使这一点更加具体,例如以标准的“ shape”类示例为例。因此,在这种情况下,您将拥有一个rectangle
的基类,并且rectangle
被一个square
类继承。现在,我要添加功能,例如“移动”功能,该功能将对象的位置移动指定的数量。 rectangle
和square
都是相同的,因此理想情况下,我将在rectangle
类中实现它,而square
将继承它。但是,由于我无权直接访问rectangle
或square
类,因此只能使用子类。因此,我希望创建一个继承自 my square
子类而不是基类rectangle
的{{1}}子类。
编辑3:用更具体的例子来重申和澄清问题:“我可以/如何创建rectangle
的子类,但可以继承自square
({ 1}}子类)是否继承了my_rectange
?”或者换句话说,“如果我不能直接修改基类,我可以/如何用自己的东西替换基类?”
答案 0 :(得分:0)
null
有时,这取决于您在做什么。可以执行或不执行的操作极其精确,问题中没有足够的细节甚至无法了解。
这使myclassA成为派生最多的形式,因此它可以成功覆盖所有虚拟方法。但是,如果您不创建B的实例,它将根本无济于事。