gpt4 book ai didi

C++接口(interface)多重继承的处理方式

转载 作者:行者123 更新时间:2023-11-30 03:52:32 24 4
gpt4 key购买 nike

我正在考虑重构大量代码,并就处理继承的最佳方式进行了一些讨论。给定以下三个类

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 有关系。但由于这里看起来不是这种情况,所以我同意你的看法。您越能限制接口(interface)的使用,您的代码就越可靠。

所以我会这样做:

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;
}

(观察我如何使您的方法纯虚拟以使您的类成为真实接口(interface))

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

class NewClass : NewClass_Interface {
....
}

这样您就可以更好地控制正在发生的事情。

此外,我建议您使用最常见的接口(interface)命名标准:IListenerITimingIActionINewClass

关于C++接口(interface)多重继承的处理方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30623659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com