这可能不是C ++特有的问题,更多的是面向对象编程。我是新手,我对我的设计表示怀疑。我有一个类 Parser ,它基本上实现了许多处理解析表达式的函数,从中缀到后缀的转换等。我在main函数中使用了这些 Parser 函数。我意识到我不需要这个类的任何数据成员。因此,我真的不需要这个类的对象。因此,我最终在课堂上将每个函数都设置为静态。这个设计有什么奇怪的吗?我应该将其作为界面吗?有什么建议吗?
答案 0 :(得分:7)
你想要一个解析器,你知道你想要它为你做什么 - 这实际上是你的“界面”。
解析器的当前实现不需要任何成员变量 - 因此,要实现您的接口,您不需要类。所以,是的,废除你的静态方法。像凯文所说,使用具有普通旧函数(非静态)的命名空间是一个好主意。
如果您觉得需要添加一个需要维护内部状态的新解析器,那么您可能希望在(1)中定义一个接口 - 一个普通的公开可见的头文件,其中包含函数声明您选择的命名空间就足够了。
答案 1 :(得分:6)
一个只有静态函数的类似乎与命名空间无法区分。那么,为什么不使用命名空间?
答案 2 :(得分:1)
决定这个问题的方法是如何使用这些功能?
1)如果所有函数都在一个文件中使用而不需要在任何地方导出,那么一定要使用静态函数。为什么?因为您可以直接在.cpp文件中将它们直接输入到类的主体中,而您不必担心维护声明并保持参数对齐。因为当解析C ++类时,会跳过在类体内定义的每个函数内的所有代码,然后在声明了所有类成员后对其进行解析,这样函数就可以看到彼此并且处于更好的名称状态。编译器如果你直接在类中声明它们,也会内联很多较小的函数。
2)如果需要从当前.cpp文件外部使用这些函数,则使用普通函数。因为以后它们可以在其他任何地方使用,并且通过名称导出它们更容易。
答案 3 :(得分:0)
将实用程序函数设置为静态是很常见的,因此,如果Parser类的功能不相互依赖,则完全可以使它们保持静态。如果他们互相依赖,并且有可能以另一种方式完成相同的功能,你应该考虑使用一个接口