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

时间:2015-05-05 07:20:53

标签: c++

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

5 个答案:

答案 0 :(得分:4)

唯一的原因是代码清洁。您不能限制对

等全局静态变量的访问
static int globalValue=5;

它(至少)在您定义的源文件中可见。 使用静态类,您可以为用户提供类提示,访问方式或访问方式。它只在类范围内可见:

class myGlobalContainer
{
   public:
   static int myInt;
   protected:
   static float myFloat;
   private:
   static bool myBool;
};

myInt的访问权限由以下人员完成:

int x=myGlobalContainer::myInt;

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;
};

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

COLOR white=COLOR::WHITE;

而不是:

COLOR white=COLOR::FromAGBR(255,255,255,255);

添加最少: 如果你应该使用静态是complete other discussion

答案 1 :(得分:1)

  

从成员访问静态类成员和静态变量   任何阶级的职能。

事实并非如此:

class A {
private:
    static int x;
};
int A::x = 5;

class B {
    static int y;
public:
    void do_something()
    {
        std::cout << A::x; // Can't access A::x because it's private
    }
};
int B::y = 10;

虽然,如果我们这样做:

static int J = 9;

class A {
private:
    static int x;
};
int A::x = 5;

class B {
    static int y;
public:
    void do_something()
    {
        std::cout << J; // Yes, J is global.
    }
};
int B::y = 10;
  • 静态成员变量可以访问与正常静态变量相对应的类的私有部分。
  • 静态成员变量可能不在类体内定义,除非它是const static或constexpr static。
  • 静态成员变量可以用作其类中成员函数的默认参数。与普通静态变量相反,除非它们是全局变量。

使用:如果你希望变量在两种情况下一直存活到程序结束,但静态成员变量可以访问该类的私有部分。

答案 2 :(得分:0)

我们可以使用static关键字定义类成员static。当我们将类的成员声明为static时,意味着无论创建了多少个类的对象,都只有一个静态成员的副本。

如果您声明一个静态成员public,那么您也可以在没有成员函数的情况下访问它。静态与变量的范围无关。它仅指定存储持续时间..

静态成员由类的所有对象共享。如果没有其他初始化,则在创建第一个对象时,所有静态数据都将初始化为零。

答案 3 :(得分:0)

我的差异列表:

  1. 您可以将静态类成员保护为私有。
  2. 您不能将静态类成员设为全局。
  3. 想不出别的什么。

答案 4 :(得分:0)

静态类成员用于在类的不同实例之间共享数据。这些成员的存储只分配一次,并且只有静态成员的这个实例才可用于该类的所有对象。

函数内的静态变量是通过函数调用保留其值的变量。 一个经典而简单的示例是函数中的int类型静态计数器,您希望跟踪此函数的调用次数。由于这通过调用保留其值,因此每次调用时都可以在函数内增加它。