处理接口多重继承的方法

C++ Way of handling multiple inheritance for interfaces

本文关键字:方法 多重继承 接口 处理      更新时间:2023-10-16

我正在研究重构大量代码,并讨论了处理继承的最佳方式。给定以下三个类

class Listener_Interface {
  public:
    virtual void message(data& data);
}
class Timing_Interface {
  public:
  virtual void timerEvent(data& data);
}
class Action_Interface {
  public:
  virtual void action(data& data);
}

需要一个类来实现所有这些,并提供一些额外的特定方法。我应该像这样继承吗?

class NewClass_Interface :
 public Listener_Interface,
 public Timing_Interface,
 public Action_Interface {
  public:
    virtual void newMethod();
}
class NewClass : NewClass_Interface {
    ....
}

class NewClass_Interface {
  public:
    virtual void newMethod();
}
class NewClass :
 public NewClass_Interface
 public Listener_Interface,
 public Timing_Interface,
 public Action_Interface {
    ....
}

对我来说,前一种似乎更正确,更容易测试等。但是由于某些原因,所有的类和代码看起来都像后者。

这取决于你的逻辑。有时你可能希望你的NewClass_Interface不一定与Listener, Timing和Action有关系。但现在看来情况并非如此,我同意你的看法。对接口的使用约束得越好,代码就会越可靠。

所以我要这样写:

class Listener_Interface {
  public:
    virtual void message(data& data) = 0;
}
class Timing_Interface {
  public:
  virtual void timerEvent(data& data) = 0;
}
class Action_Interface {
  public:
  virtual void action(data& data) = 0;
}

(观察我如何使你的方法纯虚的为了使你的类真正的接口)

class NewClass_Interface :
 public Listener_Interface,
 public Timing_Interface,
 public Action_Interface
{
  public:
    virtual void newMethod() = 0;
}
class NewClass : NewClass_Interface {
    ....
}

这样你就能更好地控制正在发生的事情。

此外,我建议您使用最常见的接口命名标准:IListener, ITiming, IActionINewClass