私有静态变量

Posted

技术标签:

【中文标题】私有静态变量【英文标题】:Private static variable 【发布时间】:2013-08-09 06:51:56 【问题描述】:

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

class Something

  private:
  static int s_nValue;

;

int Something::s_nValue = 1; // initializer


int main()



【问题讨论】:

当然你可以使用公共成员函数来访问(获取或设置)静态成员变量,即使静态成员变量是私有的。 问题不清楚! @Nawaz 我在 learncpp.com 上读到它更好地使用静态成员函数。我想知道普通的 get_Value 公共函数有什么问题吗?我现在清楚了吗? @Jigyasa 正如我在回答中所写的,“问题”是如果方法是非静态的,则需要类的实例。如果它是静态的,你可以做TypeName::Methodname(); @Borgleader:我不喜欢在头文件中使用私有静态成员。我不希望它们杂乱无章。相反,我将它们放在带有内部链接的 .cpp 文件中。 【参考方案1】:

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

您不必:

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

话虽如此,让非静态成员函数访问静态变量并没有什么意义(因为您需要类的实例才能调用它)。

【讨论】:

【参考方案2】:

如果你使用public function,你必须使用一个对象来调用它,并且使用对象调用静态函数是不合适的,所以最好将它保存在可以通过“classname::”直接访问的静态方法中

【讨论】:

【参考方案3】:

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

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

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

因为这比静态函数更少简单。您需要一个对象来调用非静态成员函数;为什么不简单地允许访问静态变量而不创建对象?

【讨论】:

以上是关于私有静态变量的主要内容,如果未能解决你的问题,请参考以下文章

js:私有变量和静态私有变量 | 访问私有属性

PHP,静态变量或私有变量哪个更好?

私有静态变量

是否可以访问私有静态变量和方法?

在类中使用私有静态变量是否合适?

C++:OpenMP 中的私有静态变量