C++:覆盖类继承?

C++: override class inheritance?

本文关键字:继承 覆盖 C++      更新时间:2023-10-16

我使用的库中有两个类,让我们称它们为class Aclass B以保持通用。Class B继承自class A,所以像这样:

class A{
...
}
class B: public A{
...
}

所以没什么好看的,但我不能直接编辑这些类中的任何一个。现在我想向类 A 添加一些功能,所以我将其子类化为,比如说,myClassA,并在子类中添加功能。当我使用myClassA时,这很好用,但是当然,在我使用的任何地方classB仍然继承了原始class A,而不是myClassA

如何制作从myClassA继承而不是原始classAclass B子类?简单地让子类从class BmyClassA继承,即使class B已经继承了原始class A,它行得通吗?

编辑:我刚刚尝试了"从两者继承"选项,可以确认它不起作用,至少没有更多的工作。可能是评论中提到的钻石问题。所以除非有办法myClassA覆盖class Bclass A的继承,否则我可能不得不简单地在class B子类中重新实现我对class A子类所做的更改,尽管这将违反 DRY 原则......

编辑2:为了使它更具体一点,以标准的"形状"类示例为例。所以在这种情况下,你将有一个基类,比如说,rectanglerectangle在 tern 中由一类square继承。现在我想添加功能,比如说一个"移动"功能,它将对象的位置移动指定的量。这对于rectanglesquare都是相同的,所以理想情况下我会在rectangle类中实现它,square会继承它。但是,由于我无法直接访问rectanglesquare类,因此我只能使用子类。因此,我希望创建一个继承自我rectangle子类而不是基rectangle类的square子类。

编辑3:用更具体的例子来重申和澄清这个问题,"我/我怎样才能创建一个square的子类,但它从my_rectange(rectangle子类(继承而不是从rectangle继承?或者,换句话说,"如果我不能直接修改基类,我/我怎么能用我自己的东西替换基类吗?

template<class T /* T must be derived from A */> class myclsssA:T { /* ... */ }
new myclassA<B>()

这有时取决于您在做什么。这可以做什么或不做什么非常精确,而且问题中没有足够的细节来接近了解。

这使得 myclassA 成为派生最多的表单,因此它可以成功覆盖所有虚拟方法。但是如果你不制作 B 的实例,它根本无济于事。