私有静态变量

时间:2013-08-09 06:51:57

标签: c++ class static

为什么我们必须声明静态成员函数来访问私有静态变量?为什么不简单地使用公共函数来访问s_nValue?我的意思是为什么使用静态成员函数而不是非静态公共函数更好?

class Something
{
  private:
  static int s_nValue;

};

int Something::s_nValue = 1; // initializer


int main()
{

}

3 个答案:

答案 0 :(得分:5)

  

为什么我们必须声明静态成员函数来访问私有静态变量?

您不必:

class Something
{
  private:
  static int s_nValue;

  public:
  static int staticAccess() { return s_nValue; }
  int Access() { return s_nValue; }

};

int Something::s_nValue = 1; // initializer


int main()
{
    Something s;
    Something::staticAccess();
    s.Access();

    return 0;
}

这两种方法都有效as can bee seen here

话虽这么说,使用非静态成员函数来访问静态变量并没有意义(因为你需要一个类的实例才能调用它)。

答案 1 :(得分:2)

如果使用pubilc函数,则必须使用对象调用它,并且不适合使用对象调用静态函数,因此最好将其保存在静态方法中,可以通过“classname ::”< / p>

答案 2 :(得分:1)

  

为什么我们必须声明静态成员函数来访问私有静态变量?

你不必。您可以从任何成员函数(静态或其他)访问私有静态成员。您也可以从任何友元函数或朋友类的成员函数访问它。

  

为什么不简单地使用公共函数来访问s_nValue?

因为 less 比静态函数简单。您需要一个对象来调用非静态成员函数;为什么不简单地允许在不创建对象的情况下访问静态变量?