困惑于C++多重继承

The*_*moX 5 c++ inheritance multiple-inheritance

我对C++的更高级功能有些新意.昨天,我发布了以下问题,我了解了虚拟继承和可怕的死亡钻石.

继承自接口和实现C++

我还通过其他链接了解到,多重继承通常是代码设计错误的标志,并且通常可以在不使用MI的情况下更好地实现相同的结果.问题是......我不知道对于以下问题,什么是更好的单继承方法.

我想为两种类型的数字点定义一个接口.输入数字点和输出数字点.接口要纤薄,只需要访问信息所需的内容.当然,绝大多数属性对于两种类型的数字点都是通用的.所以对我来说,这是一个明显的继承案例,而不是构成.

我的界面定义看起来像这样:

// Interface Definitions
class IDigitalPoint
{
public:
  virtual void CommonDigitalMethod1() = 0;
};

class IDigitalInputPoint : virtual IDigitalPoint
{
public:
  virtual void DigitialInputMethod1() = 0;
};

class IDigitalOutputPoint : virtual IDigitalPoint
{
public:
  virtual void DigitialOutputMethod1() = 0;
};
Run Code Online (Sandbox Code Playgroud)

我的实现看起来像这样:

// Implementation of IDigitalPoint
class DigitalPoint : virtual public IDigitalPoint
{
public:
  void CommonDigitalMethod1();
  void ExtraCommonDigitalMethod2();
}

// Implementation of IDigitalInputPoint
class DigitalInputPoint : public DigitalPoint, public IDigitalInputPoint 
{
public:
  void DigitialInputMethod1();
  void ExtraDigitialInputMethod2();
}

// Implementation of IDigitalOutputPoint
class DigitalOutputPoint : public DigitalPoint, public IDigitalOutputPoint 
{
public:
  void DigitialOutputMethod1();
  void ExtraDigitialOutputMethod2();
}
Run Code Online (Sandbox Code Playgroud)

那么我怎么能重新格式化这个结构,以避免MI?

mvi*_*auz 7

"多重继承通常是代码设计错误的标志" - 纯接口的父级不计入此规则.您的I*类是纯接口(仅包含纯虚函数),因此您Digital*Point可以在这方面使用类