从两个抽象类继承,其中一个也需要另一个基类的一部分
Posted
技术标签:
【中文标题】从两个抽象类继承,其中一个也需要另一个基类的一部分【英文标题】:Inherit from two abstract classes, where one of them also needs parts of the other base class 【发布时间】:2020-03-18 13:09:02 【问题描述】:这更多是一个没有实际代码示例的理论问题,我不确定我是否只是想多了。
整个事情是我正在研究的 GUI 实现的一部分,其中 GUI 表示为由 Leafs
和 Nodes
特化组成的树结构,然后具有一些特殊行为,如文本内容、图像或其他在其特定的render()
实现中得到处理。
但是,我的问题是,我希望在某些 GUI 上具有 Hover
功能,但 Hover
功能需要!一些!基本的 GUI 元素功能,如图所示,现在我无法理解如何将这两个部分连接到最终的 Button
类中。它必须继承所有 Leaf
功能以及抽象的 Hover
东西。
有没有办法按照我想象的方式进行这项工作?或者我是否必须为所有 GUI 提供此 Hover
功能,而只为不使用它的 GUI 实现空白 onMouseEnter()
和 onMouseExit()
?
我不想将它提供给所有 GUI 的原因是因为检查鼠标是否悬停在元素上不是免费的。并非所有元素都必须是交互式的。
几点说明:
- Hover
也可能被 Node 特化继承
- Hover
中的函数列表已完成
- Leaf
和 Node
都以不同的方式实现了来自 Element
的一些抽象函数
如果您能为此想出更好的标题,请随时提出修改建议
【问题讨论】:
让Hover
继承自Element
。然后 Leaf
和 Node
继承自 Element
或 Hover
取决于它需要什么。从Hover
继承的仍然是Element
s。
那么我必须有两个单独的Hover
类,一个用于Leaf
,一个用于Node
,因为Leaf
和Node
都实现了一些抽象Element
职能。我将在笔记中将此添加到我的问题中
嗯...不,你不会? Leaf 和 Node 仍然能够实现所有、没有或任何抽象元素函数。
@super 是的,对不起,我看错了你在那里写的东西。但是,我是否不需要Leaf
和Leaf_Hover
(Node
相同)来继承其他特殊元素?例如 Label
是 Leaf
并且不需要 Hover
功能。或者有没有办法从多个基础继承并根据情况选择正确的?
【参考方案1】:
我会将 Element 和 Hover 的通用功能提取到一个通用基类中:
MouseBase
|
------------------------------
| |
| Element
| |
Hover |
| -------------------------------
| | |
| Leaf Node
---------------
|
Button
在这种情况下,如果 MouseBase 是一个虚拟基类,Button 将获得它的一个版本,否则它将通过 Element 继承获得一个,通过 Hover 继承获得第二个。
【讨论】:
听起来像个计划,我会试试看。 您对如何解决从Hover
和Leaf
继承时函数不明确的问题有什么建议吗? onMouseMovedEvent
必须在 MouseBase
中,并在 Hover
和 Leaf
中被覆盖
@DJSchaffner:你必须通过说出你想要哪一个来消除歧义,例如Hover::onMouseEvent
。 using
通常用来取更好听的名字。
有了你的建议,我得到了它的工作。谢谢!我不得不让Element
和Hover
继承public virtual MouseBase
并将一些基本功能移到该类中。以上是关于从两个抽象类继承,其中一个也需要另一个基类的一部分的主要内容,如果未能解决你的问题,请参考以下文章