C ++处理接口的多重继承的方法

时间:2015-06-03 14:54:47

标签: c++ inheritance

我正在考虑重构很多代码,并讨论了与处理继承的最佳方法的关系。给出以下三个类

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 {
    ....
}

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

1 个答案:

答案 0 :(得分:2)

这取决于你的逻辑。有时你可能希望你的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 {
    ....
}

通过这种方式,您可以更好地控制正在发生的事情。

另外,我建议您使用最常用的接口命名标准:IListenerITimingIActionINewClass