为什么我们必须声明静态成员函数才能访问私有静态变量?为什么不简单地使用公共函数来访问 s_nValue?我的意思是为什么使用静态成员函数而不是非静态公共函数更好?
class Something
{
private:
static int s_nValue;
};
int Something::s_nValue = 1; // initializer
int main()
{
}
为什么我们必须声明静态成员函数才能访问私有静态变量?
您不必:
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;
}
两种方法都可以在这里看到
话虽如此,让非静态成员函数访问静态变量并没有真正意义(因为您需要类的实例才能调用它)。
如果使用 public function ,则必须使用对象调用它,并且不适合使用对象调用静态函数,因此最好将其保留在可以通过“classname::”直接访问的静态方法中
为什么我们必须声明静态成员函数才能访问私有静态变量?
你不必。您可以从任何成员函数(静态或其他)访问私有静态成员。您还可以从任何朋友函数或朋友类的成员函数访问它。
为什么不简单地使用公共函数来访问 s_nValue?
因为这不如静态函数简单。您需要一个对象来调用非静态成员函数;为什么不简单地允许访问静态变量而不创建对象呢?