是否需要为 C++中的一个或多个函数设置类

Is there a need to set up a class for one or several functions in C++

本文关键字:一个 函数 设置 C++ 是否      更新时间:2023-10-16

我对是否需要为一个或多个函数设置一个类感到困惑。我举了一个例子来阐明我的观点:

file1.h
   void Fun1();
   void Fun2();
file1.cpp
   void Fun1() {}
   void Fun2() {}

如您所见,我们这里有两个函数,使用这些函数的人只需要包含头文件,然后调用它们。然后,我还可以选择设置一个没有任何成员变量的类,但只针对这两个函数(假设这两个函数密切相关):

file1.h
   class Operation
   {
      Operation() {};
      ~Operation() {};
      void Fun1();
      void Fun2();
    };
file1.cpp
    void Operation::Fun1() {};
    void Operation::Fun2() {};

那么我的问题是哪种做法更好,为什么。谢谢。

你应该使用专用的命名空间

文件1.h:

namespace MyDedicatedNameSpace
{
   void Fun1();
   void Fun2();
}

文件1.cpp:

void MyDedicatedNameSpace::Fun1() {}
void MyDedicatedNameSpace::Fun2() {}

或者,如果要使用类,则应将这些函数设置为静态:

文件1.h:

   class Operation
   {
public:
      static void Fun1();
      static void Fun2();
    };

文件1.cpp:

void Operation::Fun1() {};
void Operation::Fun2() {};

你不必"把它们放在一个类中,你可以同时进行这两种实现。这主要是一种设计偏好。Java 编码人员习惯于将这些函数作为实用程序类的静态函数,但C++您不必这样做,尽管有些人这样做。

如果您关心的只是在特定上下文中封装这些函数,则还可以考虑将它们放在命名空间中。

你想把它们放在一个类中应该是有原因的。如果只是用于分组,命名空间更适合此角色

file1.h
   namespace Operation
   {
      void Fun1();
      void Fun2();
    };
file1.cpp
   namespace Operation
   {
      void Fun1(){};
      void Fun2(){};
   };

附言如果出于某种原因您仍然更喜欢使用 class,请至少将函数设为静态,这样您就不需要创建此类的实例。

file1.h
   class Operation
   {  
   public:    
      static void Fun1();
      static void Fun2();
    };
file1.cpp
    void Operation::Fun1() {};
    void Operation::Fun2() {};

既然你专门问了C++,最正确的答案是将它们命名为命名空间:

文件1.h:

namespace MyNamespace
{
    void Fun1();
    void Fun2();
}

文件1.cpp:

namespace MyNamespace
{
    void Fun1() {}
    void Fun2() {}
}

然后要使用它们,您只需调用MyNamespace::Fun1()等。

正如我一开始所说,这对C++来说是最正确的。

如果你是为 C 或混合 C/C++ 编写的,应该注意 C 不支持命名空间。因此,在这种情况下,使它们成为类的静态函数将是一个更好的组织途径。

文件1.h

class MyClass
{
public:
    static void Fun1();
    static void Fun2();
};

文件1.c

void MyClass::Fun1() { }
void MyClass::Fun2() { }

注意:如果你正在做混合编程,你应该考虑让它更容易被包含,但这超出了这个问题的范围。