为什么我们必须声明静态成员函数来访问私有静态变量?为什么不简单地使用公共函数来访问s_nValue?我的意思是为什么使用静态成员函数而不是非静态公共函数更好?
class Something
{
private:
static int s_nValue;
};
int Something::s_nValue = 1; // initializer
int main()
{
}
答案 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 比静态函数简单。您需要一个对象来调用非静态成员函数;为什么不简单地允许在不创建对象的情况下访问静态变量?