C#到C++;静态类 < >我将C++中的一些代码移植到C++中。我不知道如何创建像C#中的静态类那样的类

C#到C++;静态类 < >我将C++中的一些代码移植到C++中。我不知道如何创建像C#中的静态类那样的类,c#,c++,C#,C++,基本上,temperatureClass是一个实用程序类,用于执行不会创建实例的计算。 我有几个问题: C++的计算温度是否应保持为静态? 如果我保持它是静态的,那么如何在C++中初始化int偏移量,因为它是静态计算的函数?使用的。 LI>是否应该将Con访问器保持为C++中的静态,因为需要设置上下文? 或更一般地说,C++中的实用工具类的实现方式是什么? C++版本很可能是一个只包含静态成员的类 偏移量变量为整数类型,如果声明为静态变量,则可以使用与C#中相同的方式初始化它(但您可能需要添

基本上,temperatureClass是一个实用程序类,用于执行不会创建实例的计算。 我有几个问题:

C++的计算温度是否应保持为静态?<李> 如果我保持它是静态的,那么如何在C++中初始化int偏移量,因为它是静态计算的函数?使用的。 <> LI>是否应该将Con访问器保持为C++中的静态,因为需要设置上下文?

或更一般地说,C++中的实用工具类的实现方式是什么?

C++版本很可能是一个只包含静态成员的类
  • 偏移量
    变量为整数类型,如果声明为静态变量,则可以使用与C#中相同的方式初始化它(但您可能需要添加一个
    常量
  • 如果
    context
    是静态的,则访问器也必须是静态的,因为静态成员函数无法访问非静态成员变量
  • 请注意,我认为这不是一个好的设计。从我的观点来看,C++中的“整个静态类”没有什么意义,我宁愿在一个孤立的命名空间中使用一个自由函数集。如果您仍然选择“静态类”方法,我建议将默认构造函数声明为private,以明确该类没有被实例化的意义

    C++版本很可能是一个只包含静态成员的类
  • 偏移量
    变量为整数类型,如果声明为静态变量,则可以使用与C#中相同的方式初始化它(但您可能需要添加一个
    常量
  • 如果
    context
    是静态的,则访问器也必须是静态的,因为静态成员函数无法访问非静态成员变量
  • 请注意,我认为这不是一个好的设计。从我的观点来看,C++中的“整个静态类”没有什么意义,我宁愿在一个孤立的命名空间中使用一个自由函数集。如果您仍然选择“静态类”方法,我建议将默认构造函数声明为私有,以明确该类没有被实例化的点。

    C#中的静态类只是无法实例化的类,并且只包含静态方法

    <> > C++中没有显式静态类,但是可以通过将构造函数隐藏为私有,并提供公共静态方法来实现C++中的相同。

  • 通过静态初始化:

    类温度类{ 私人: 静态整数偏移; };

    int temperatureClass::offset=50

  • 你可以让它保持静止,这样你就可以尽可能地遵循原作

  • C#中的静态类只是不能实例化的类,只包含静态方法

    <> > C++中没有显式静态类,但是可以通过将构造函数隐藏为私有,并提供公共静态方法来实现C++中的相同。

  • 通过静态初始化:

    类温度类{ 私人: 静态整数偏移; };

    int temperatureClass::offset=50

  • 你可以让它保持静止,这样你就可以尽可能地遵循原作


  • 一些air代码,而不让它通过编译器(因此,如果有错误,请告诉我,我会修复它,但我认为大部分内容应该正确地直接从C#翻译到C++)


    (如果这是一个好的设计与否是另一个问题,但这与C#或C++无关)

    一些air代码,而不让它通过编译器(因此,如果有错误,请告诉我,我会修复它,但我认为大部分内容应该正确地直接从C#翻译成C++)

    (如果这是一个好的设计,是另一个问题,但它独立于C语言或C++)

    C++,<强>你不需要静态类>,因为你可以在命名空间范围内拥有函数。在C#中,需要静态类,因为所有函数都必须在类范围内

    我会这样做:




    < C++ > <>强>不需要静态类< /St>,因为在命名空间范围内可以有函数。在C#中,需要静态类,因为所有函数都必须在类范围内

    我会这样做:





    // in C#
    public static temperatureClass{
      private static int offset = 50;
      private static Context context;
    
      public static calculateTemperature(){
      //use a;
      //use context;
      }
    
      public static Context con{
        set{
            context = value;
          }
      }
    }
    
    int main() {
     Context con1;
     temperatureClass.con = con1; //con1 is a 
     temperatureClass.calculateTemperature();
    }
    
    class temperatureClass
    {
      private:
           static int offset = 50;
           static Context context;
           temperatureClass(){};  // avoid instantiation
    
      public:
         static void calculateTemperature()
         {
           //use a;
           //use context;
         }
    
         static void SetCon(Context c)
         {
            context = c;
         }
    };   // dont forget semicolon in C++ :-)
    
    int main() 
    {
       Context con1;
       temperatureClass::SetCon(con1);
       temperatureClass::calculateTemperature();
    }
    
    // temp.h
    namespace temperature {
      void calculateTemperature(const Context& context);
    }
    
    // temp.cpp
    namespace { // private stuff
      int offset = 50;
    }
    
    namespace temperature {
      void calculateTemperature(Context context){
        //use a;
        //use context;
      }
    }
    
    // programm.cpp
    #include "temp.h"
    
    int main() {
     Context con1;
     temperature.calculateTemperature(con1);
    }