0

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

class Something
{
  private:
  static int s_nValue;

};

int Something::s_nValue = 1; // initializer


int main()
{

}
4

3 回答 3

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

两种方法都可以在这里看到

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

于 2013-08-09T06:55:59.973 回答
2

如果使用 public function ,则必须使用对象调用它,并且不适合使用对象调用静态函数,因此最好将其保留在可以通过“classname::”直接访问的静态方法中

于 2013-08-09T06:58:19.237 回答
1

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

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

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

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

于 2013-08-09T07:00:09.530 回答