体系结构和多重继承

时间:2018-10-12 12:53:00

标签: c++ architecture

我在开发程序体系结构时发现了多重继承的问题。

我有一些必须以GUI形式显示的不同对象。 我更喜欢从Widget类继承,以避免实现如下所示的方法(可以在动画中使用的show,hide,setEnabled,move等方法):

void Device::show()
{
    this->widget->show();
}

void Device::hide()
{
    this->widget->hide();
}

// etc...

好吧,我将所有对象分为两组:

  • 容器(只是为了保持平整,它具有编号和有关其内容的信息)
  • 设备(带电压,状态代码,警告,错误等的真实设备)

因此,当我拥有既是容器又是设备的实体时,就会出现问题(例如称重机,因为它应该具有有关其自身编号及其内容以及警告,电压问题等信息)

我想到了:

  • 使用接口,但是实现接口的每个类都必须实现接口的方法。而且,将ctrl+cctrl+v的所有错误处理代码(因为所有对象都相同)到实现接口{{1 }}或ErrorAble。 Tommorow会有人对我说:“添加新的错误代码” ...然后我必须说出他... 在所有类中进行更改。
  • 创建一个基类,但是当“瓶”对象(容器)具有电压,错误代码,警告(作为设备)时,这符合逻辑。

我应该对体系结构做些介绍。但是我不知道该怎么办。有人可以建议我吗?

enter image description here

1 个答案:

答案 0 :(得分:0)

我通过将DeviceContainer与对象层次结构中的Widget移到同一级别来解决了这个问题,现在它们不再继承自Widget。结果,如果对象既是设备又是容器,则类定义如下:

class SomeObject : public Widget, public Device, public Container
{ /* ... */ };

这对我有帮助,避免了钻石继承,因为DeviceContainer没有父母。

另外:我拒绝使用评论中的内容,因为:

  1. Device不属于SomeObject的一部分。
  2. SomeObject是可能的设备之一。
  3. SomeObject是可能的小工具之一。
  4. SomeObject是可能的容器之一。

我所得到的:容器/设备方法仅在程序中定义和实现一次(例如容器属性的setter和getter),并且它们的所有子对象都可以在框中使用它们 没有任何授权。