Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我需要在不添加一些数据成员的情况下组合几种方法。有什么想法吗?_C++_Oop - Fatal编程技术网

C++ 我需要在不添加一些数据成员的情况下组合几种方法。有什么想法吗?

C++ 我需要在不添加一些数据成员的情况下组合几种方法。有什么想法吗?,c++,oop,C++,Oop,假设我需要编写几个函数来处理一些数据。这些函数只执行一项任务—一些数学计算。我认为没有必要将它们与一些数据成员组合在一起 我应该使用: 一个没有数据成员的类,并将这些函数声明为静态方法,这样我就可以在不创建类对象的情况下使用它们, 或匿名名称空间, 或者我需要更复杂的架构和设计? 实际上,我写的语言是C++,但是我认为这个问题不取决于发展语言是什么。 在C++中,我会使用实用的命名空间,而不是只使用静态方法的类。C++中的,我会使用实用的命名空间,不是只有静态方法的类。我不明白为什么要将它们放在

假设我需要编写几个函数来处理一些数据。这些函数只执行一项任务—一些数学计算。我认为没有必要将它们与一些数据成员组合在一起

我应该使用:

一个没有数据成员的类,并将这些函数声明为静态方法,这样我就可以在不创建类对象的情况下使用它们, 或匿名名称空间, 或者我需要更复杂的架构和设计?
<>实际上,我写的语言是C++,但是我认为这个问题不取决于发展语言是什么。

在C++中,我会使用实用的命名空间,而不是只使用静态方法的类。C++中的

,我会使用实用的命名空间,不是只有静态方法的类。

我不明白为什么要将它们放在匿名名称空间中。这样做是为了确保这些函数只在一个编译单元中使用,这与您的问题无关

现在,选择类中的静态函数还是实用程序命名空间中的自由函数,这取决于您的需要。这些解决方案之间存在一些差异:

在类中,可以将某些函数设置为private、protected或public。例如,您可能有私人功能来完成公共功能所需的普通事情。 名称空间可以扩展,其定义可以扩展到多个文件中。 类可以子类化,因此它们的功能也可以扩展。您可以拥有一个带有受保护的静态函数和客户机类的模型,该模型子类化该类以实现更好的封装。
我不明白你为什么要把它们放在匿名名称空间中。这样做是为了确保这些函数只在一个编译单元中使用,这与您的问题无关

现在,选择类中的静态函数还是实用程序命名空间中的自由函数,这取决于您的需要。这些解决方案之间存在一些差异:

在类中,可以将某些函数设置为private、protected或public。例如,您可能有私人功能来完成公共功能所需的普通事情。 名称空间可以扩展,其定义可以扩展到多个文件中。 类可以子类化,因此它们的功能也可以扩展。您可以拥有一个带有受保护的静态函数和客户机类的模型,该模型子类化该类以实现更好的封装。
这些方法使用的数据是什么?i、 它们应该是表示那个些数据的类的方法吗?这些方法操作的是什么数据?它们是否是表示数据的类的方法?因此它可以是匿名的命名空间,保存所有这些函数吗?参见下面的CKMANN的答案,为什么匿名命名空间可能不是最好的主意。C++中,一般规则是在可能的时候更喜欢自由函数。正如MadKeithV建议的那样,只有当类成员函数实际上是你需要的时候,它才可以是匿名的命名空间,保存所有这些函数。下面请看CKMANN的答案,为什么匿名命名空间可能不是最好的主意。在C++中,一般规则是在可能的时候更喜欢自由函数。正如MadKeithV所建议的,仅在您个人实际需要时生成类成员函数,我不喜欢继承滥用-如果子类不是Liskov替代品。但是您当然可以使用受保护继承或私有继承。谢天谢地C++的黑暗角落;我同意这有点滥用继承的概念我也不建议这样做,但我想说这是一种可能性。就我个人而言,我不喜欢继承滥用——如果子类不是Liskov替代品的话。但是您当然可以使用受保护继承或私有继承。谢天谢地C++的黑暗角落;我同意这有点滥用继承的概念我也不建议这样做,但我想说这是一种可能性。