我在开发程序体系结构时发现了多重继承的问题。
我有一些必须以GUI形式显示的不同对象。 我更喜欢从Widget类继承,以避免实现如下所示的方法(可以在动画中使用的show,hide,setEnabled,move等方法):
void Device::show()
{
this->widget->show();
}
void Device::hide()
{
this->widget->hide();
}
// etc...
好吧,我将所有对象分为两组:
因此,当我拥有既是容器又是设备的实体时,就会出现问题(例如称重机,因为它应该具有有关其自身编号及其内容以及警告,电压问题等信息)
我想到了:
ctrl+c
,ctrl+v
的所有错误处理代码(因为所有对象都相同)到实现接口{{1 }}或ErrorAble
。 Tommorow会有人对我说:“添加新的错误代码” ...然后我必须我应该对体系结构做些介绍。但是我不知道该怎么办。有人可以建议我吗?
答案 0 :(得分:0)
我通过将Device
和Container
与对象层次结构中的Widget
移到同一级别来解决了这个问题,现在它们不再继承自Widget
。结果,如果对象既是设备又是容器,则类定义如下:
class SomeObject : public Widget, public Device, public Container
{ /* ... */ };
这对我有帮助,避免了钻石继承,因为Device
和Container
没有父母。
另外:我拒绝使用评论中的内容,因为:
Device
不属于SomeObject
的一部分。SomeObject
是可能的设备之一。SomeObject
是可能的小工具之一。SomeObject
是可能的容器之一。我所得到的:容器/设备方法仅在程序中定义和实现一次(例如容器属性的setter和getter),并且它们的所有子对象都可以在框中使用它们 没有任何授权。