我是 C++ 的初学者。我目前正在从事一个涉及多个类(class)的项目。我对此有疑问,我有 2 节课 A
和 B
, class B
有 2 种方法 send
和 registerrecievehandler
A类使用哪个。我不明白什么时候应该继承。我的思考过程是因为它是一个函数调用,我应该只使用 class B
的方法吗?如static
?我不认为我需要创建一个类型为 B
的类对象因为它只是一个函数调用。
我的问题是应该 class A
继承 class B
?
class A{
//member variables of this class
public:
senddata(string data){
send(data)
}
createdata(){
// does something here
senddata(data); //just an example
}
receive(){
registerrecievehandler(f);
}
}
class B{ //networking stack
func_ptr* p
//other members of this class
public:
//many member functions here
send(string data){
//do something
}
registerrecievehandler(f){
p =f;
}
}
最佳答案
My question is should class A inherit class B ?
一般的答案是,“这取决于”。但是,我将使用您问题中的信息和最佳实践来回答您的问题。我们甚至可以将这个问题改写为“一个类什么时候应该继承另一个类?”
我们掌握的信息:
有这么多信息的答案很简单。不,在这里进行继承是没有意义的。为什么?因为
A
正在使用 B
.使用 B
不需要继承B
.最佳实践怎么说?在回答这个问题之前,让我们记住一件事,答案或最佳实践并不适用于任何地方和任何情况。有时我们必须考虑我们的问题并创建最适合手头问题的解决方案。
最佳实践是“最小化耦合”和类之间的依赖关系。您的类/接口(interface)等应该彼此弱链接。这不仅带来了更好的设计,而且使代码更容易修改和维护,并为测试和其他事情开辟了机会。它甚至可能带来更好的性能,但不一定。继承是两个类可以拥有的最强关系形式,它导致强耦合。所以,如果你
A
继承 B
,很有可能如果您修改 B
,您可能需要修改A
也因此增加了您的工作量并使其难以维护您的代码。在您的情况下不使用继承的原因:
B
中没有任何 protected 成员您想在 A
中访问virtual
您想在 A
中专门化/覆盖的函数A
不觉得它类似于 B
A
想用B
, 所以它应该包含 B
(作曲)什么时候应该使用继承?
当您想要表达“IS-A”关系时使用继承,例如 Car IS-A Vehicle。我知道这很简单,在开发真正的软件时很难找到或表达这种关系,但我只是在说明一点。
My thought process is as it is a function call should I just make the methods of class B as static ?. I don't think so I need to create a class object of type B as it's just a function call.
这部分可能会导致基于意见的答案。
您可以将它们设为静态并像那样使用它们,但在 C++ 中,我们可以在这种情况下使用更好的工具:
namespace
.您可以制作
B
一个 namespace
然后从任何你想要的地方使用它里面的函数。
关于c++ - 我应该创建一个类对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63140967/