C++中的静态类成员变量和静态变量

Ava*_*ons 1 c++

静态类成员变量和静态变量的主要区别是什么?静态类成员和静态变量都可以从任何类的成员函数中访问。静态类成员和静态变量的具体用途是什么?

Mar*_*ott 5

唯一的原因是代码整洁。您不能限制对全局静态变量的访问,例如

static int globalValue=5;
Run Code Online (Sandbox Code Playgroud)

它(至少)在您定义它的源文件中可见。使用静态类,您可以向用户提供类提示,以及您希望如何访问它或被访问的方式。它仅在类范围内可见:

class myGlobalContainer
{
   public:
   static int myInt;
   protected:
   static float myFloat;
   private:
   static bool myBool;
};
Run Code Online (Sandbox Code Playgroud)

myInt 的访问是通过以下方式完成的:

int x=myGlobalContainer::myInt;
Run Code Online (Sandbox Code Playgroud)

public 修饰符提示用户您将此值视为 myGlobalContainer 的一部分并希望他使用它。您不会像使用globalValue.

修饰符protectedprivate表明您不希望“局外人”访问这些值。

protectedprivate static属性主要用于在类的实例之间共享信息,例如实例计数器:

class myGlobalContainer
{
   public:
     myGlobalContainer() 
     {
       if(counter==0)
         DoSomeSpecialGlobalInit();
       counter++;
     }
     ~myGlobalContainer() 
     {
       counter--;
       if(counter==0)
         DoSomeSpecialGlobalUnInit();
     }
   private:
   static int counter=0;
};
Run Code Online (Sandbox Code Playgroud)

public static属性经常与const. 它们主要为用户提供快捷方式。例如:

COLOR white=COLOR::WHITE;
Run Code Online (Sandbox Code Playgroud)

代替:

COLOR white=COLOR::FromAGBR(255,255,255,255);
Run Code Online (Sandbox Code Playgroud)

最少添加:是否应该使用静态是一个完整的其他讨论