私有静态变量
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?
因为这比静态函数更少简单。您需要一个对象来调用非静态成员函数;为什么不简单地允许访问静态变量而不创建对象?
【讨论】:
以上是关于私有静态变量的主要内容,如果未能解决你的问题,请参考以下文章