C++:覆盖类继承?
C++: override class inheritance?
我使用的库中有两个类,让我们称它们为class A
和class B
以保持通用。Class B
继承自class A
,所以像这样:
class A{
...
}
class B: public A{
...
}
所以没什么好看的,但我不能直接编辑这些类中的任何一个。现在我想向类 A 添加一些功能,所以我将其子类化为,比如说,myClassA
,并在子类中添加功能。当我使用myClassA
时,这很好用,但是当然,在我使用的任何地方classB
仍然继承了原始class A
,而不是myClassA
。
如何制作从myClassA
继承而不是原始classA
的class B
子类?简单地让子类从class B
和myClassA
继承,即使class B
已经继承了原始class A
,它行得通吗?
编辑:我刚刚尝试了"从两者继承"选项,可以确认它不起作用,至少没有更多的工作。可能是评论中提到的钻石问题。所以除非有办法用myClassA
覆盖class B
对class A
的继承,否则我可能不得不简单地在class B
子类中重新实现我对class A
子类所做的更改,尽管这将违反 DRY 原则......
编辑2:为了使它更具体一点,以标准的"形状"类示例为例。所以在这种情况下,你将有一个基类,比如说,rectangle
,rectangle
在 tern 中由一类square
继承。现在我想添加功能,比如说一个"移动"功能,它将对象的位置移动指定的量。这对于rectangle
和square
都是相同的,所以理想情况下我会在rectangle
类中实现它,square
会继承它。但是,由于我无法直接访问rectangle
或square
类,因此我只能使用子类。因此,我希望创建一个继承自我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 的实例,它根本无济于事。
- 继承、覆盖和虚函数,以避免重复代码
- 循环依赖,在继承类的情况下使用覆盖方法
- C++:覆盖类继承?
- 有没有办法调用基类函数,该函数在使用私有继承的派生类中被覆盖?
- 关于继承和覆盖的问题
- 使用父类方法覆盖的多重继承
- C++继承 - 覆盖功能,包括使用 "::" s、.h 文件和.cpp文件
- 三重继承,没有唯一的最终覆盖者
- 多重继承:调用所有覆盖的函数
- 在多级继承中重写,中间派生类未覆盖函数
- C 从同一基本模板类覆盖功能,具有多个继承模棱两可的函数调用
- 继承覆盖
- 执行覆盖的继承函数
- 我们可以覆盖继承类中的纯虚函数吗?
- 覆盖和继承
- 需要有关多个继承和可选功能覆盖C 的建议
- C 多重继承,虚拟方法覆盖问题和协变量返回类型
- 用方法覆盖的C 继承
- 是否可以从 C++11 智能指针继承并覆盖相关运算符?
- C++继承函数覆盖