我应该创建一个 Class 对象吗?

Pun*_*ian 2 c++ oop inheritance

我是 C++ 的初学者。我目前正在从事一个涉及多个类的项目。我有一个关于这个问题,我有2类ABclass B有2种方法sendregisterrecievehandler其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)

Waq*_*med 5

我的问题是 A 类应该继承 B 类吗?

一般的答案是“视情况而定”。但是,我将使用您的问题和最佳实践中的信息来回答您的问题。我们甚至可以将问题重新表述为“一个类何时应该继承另一个类?

我们拥有的信息:

  • 我们有两个班级,A 和 B
  • B 类有 2 个将在 A 类中使用的成员函数

有这么多信息的答案很简单。不。在这里进行继承没有意义。为什么?因为A正在使用 B. 使用B它不需要继承B

最佳实践怎么说?在回答这个问题之前,让我们记住一件事,答案或最佳实践并不适用于任何地方和所有情况。有时我们必须考虑我们的问题并创建最适合手头问题的解决方案。

最佳实践是“最小化耦合”和类之间的依赖关系。你的类/接口等应该彼此弱链接。这不仅会导致更好的设计,而且使代码更易于修改和维护,并为测试和其他事情开辟了机会。它甚至可能带来更好的性能,但不一定。继承是两个类可以拥有的最强关系形式,它会导致强耦合。因此,如果您A继承B,则很有可能如果您修改B,您可能也需要修改A,从而增加您的工作并使代码难以维护。

在您的情况下不使用继承的原因:

  • 您没有任何B要访问的受保护成员A
  • 您没有virtual要专攻/覆盖的任何功能A
  • A 远程感觉不像是类似的东西 B
  • A想使用B,所以它应该包含B(组合)

什么时候应该使用继承?

当您想要表达“IS-A”关系时使用继承,例如 Car IS-A Vehicle。我知道这很简单,在开发真正的软件时很难找到或表达这种关系,但我只是提出一个观点。

我的思考过程是因为它是一个函数调用,我应该将 B 类的方法设为静态吗?。我认为不需要创建 B 类型的类对象,因为它只是一个函数调用。

这部分可能会导致基于意见的答案。

您可以将它们设为静态并像这样使用它们,但是在 C++ 中,我们可以在这种情况下使用更好的工具:namespace.

您可以创建B一个namespace,然后从任何您想要的地方使用其中的函数。