gpt4 book ai didi

c++ - 我应该创建一个类对象吗?

转载 作者:行者123 更新时间:2023-12-01 14:37:08 25 4
gpt4 key购买 nike

我是 C++ 的初学者。我目前正在从事一个涉及多个类(class)的项目。我对此有疑问,我有 2 节课 AB , class B有 2 种方法 sendregisterrecievehandler 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 类有 2 个成员函数,将在 A 类中使用

  • 有这么多信息的答案很简单。不,在这里进行继承是没有意义的。为什么?因为 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/

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