Pun*_*ian 2 c++ oop inheritance
我是 C++ 的初学者。我目前正在从事一个涉及多个类的项目。我有一个关于这个问题,我有2类A和B,class B有2种方法send和registerrecievehandler其A类用途。我不明白什么时候应该继承它。我的思考过程是因为它是一个函数调用,我应该只制作class Bas的方法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;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是 A 类应该继承 B 类吗?
一般的答案是“视情况而定”。但是,我将使用您的问题和最佳实践中的信息来回答您的问题。我们甚至可以将问题重新表述为“一个类何时应该继承另一个类? ”
我们拥有的信息:
有这么多信息的答案很简单。不。在这里进行继承没有意义。为什么?因为A正在使用 B. 使用B它不需要继承B。
最佳实践怎么说?在回答这个问题之前,让我们记住一件事,答案或最佳实践并不适用于任何地方和所有情况。有时我们必须考虑我们的问题并创建最适合手头问题的解决方案。
最佳实践是“最小化耦合”和类之间的依赖关系。你的类/接口等应该彼此弱链接。这不仅会导致更好的设计,而且使代码更易于修改和维护,并为测试和其他事情开辟了机会。它甚至可能带来更好的性能,但不一定。继承是两个类可以拥有的最强关系形式,它会导致强耦合。因此,如果您A继承B,则很有可能如果您修改B,您可能也需要修改A,从而增加您的工作并使代码难以维护。
在您的情况下不使用继承的原因:
B要访问的受保护成员Avirtual要专攻/覆盖的任何功能AA 远程感觉不像是类似的东西 BA想使用B,所以它应该包含B(组合)什么时候应该使用继承?
当您想要表达“IS-A”关系时使用继承,例如 Car IS-A Vehicle。我知道这很简单,在开发真正的软件时很难找到或表达这种关系,但我只是提出一个观点。
我的思考过程是因为它是一个函数调用,我应该将 B 类的方法设为静态吗?。我认为不需要创建 B 类型的类对象,因为它只是一个函数调用。
这部分可能会导致基于意见的答案。
您可以将它们设为静态并像这样使用它们,但是在 C++ 中,我们可以在这种情况下使用更好的工具:namespace.
您可以创建B一个namespace,然后从任何您想要的地方使用其中的函数。