[英]Static class member variable and static variable in c++
静态类成员变量和静态变量之间的主要区别是什么? 静态类成员和静态变量都可以从任何类的成员函数访问。 静态类成员和静态变量的具体用途是什么?
唯一的原因是代码的清洁度。 您不能限制对全局静态变量的访问,例如
static int globalValue=5;
它(至少)在您定义它的源文件中可见。 使用静态类,您可以为类的用户提供有关如何访问它或如何访问它的提示。 它仅在类范围内可见:
class myGlobalContainer
{
public:
static int myInt;
protected:
static float myFloat;
private:
static bool myBool;
};
myInt的访问通过以下方式完成:
int x=myGlobalContainer::myInt;
public修饰符向用户提示您将该值视为myGlobalContainer的一部分,并希望他使用它。 您不会像对globalValue
那样污染全局名称空间。
修饰语protected
和private
表明您不希望“局外人”访问这些值。
protected
和private
static
属性通常用于在类的实例之间共享信息,例如,实例计数器:
class myGlobalContainer
{
public:
myGlobalContainer()
{
if(counter==0)
DoSomeSpecialGlobalInit();
counter++;
}
~myGlobalContainer()
{
counter--;
if(counter==0)
DoSomeSpecialGlobalUnInit();
}
private:
static int counter=0;
};
public
static
属性经常在const
看到。 它们主要是为用户提供快捷方式。 例如:
COLOR white=COLOR::WHITE;
代替:
COLOR white=COLOR::FromAGBR(255,255,255,255);
至少要补充一点:如果您不应该使用静态,则是完整的其他讨论 。
静态类成员和静态变量都可以从任何类的成员函数访问。
那是不对的:
class A {
private:
static int x;
};
int A::x = 5;
class B {
static int y;
public:
void do_something()
{
std::cout << A::x; // Can't access A::x because it's private
}
};
int B::y = 10;
虽然,如果我们这样做:
static int J = 9;
class A {
private:
static int x;
};
int A::x = 5;
class B {
static int y;
public:
void do_something()
{
std::cout << J; // Yes, J is global.
}
};
int B::y = 10;
用途:如果在两种情况下都希望变量在程序结束前都有效,但是静态成员变量可以访问该类的私有部分。
我们可以使用static关键字定义static类。 当我们将一个类的成员声明为静态成员时,这意味着无论创建了多少个此类对象,静态成员只有一个副本。
如果声明静态成员为public,则也可以不使用成员函数来访问它。.static与变量的范围无关。.它仅指定存储期限。
该类的所有对象共享一个静态成员。 如果没有其他初始化,则在创建第一个对象时,所有静态数据都将初始化为零。
我的差异清单:
想不到别的了。
静态类成员用于在类的不同实例之间共享数据。 这些成员的存储仅分配一次,并且只有静态成员的该实例才可用于该类的所有对象。
函数内部的静态变量是通过函数调用保留其值的变量。 一个经典但简单的示例是函数中的int类型静态计数器,您需要跟踪该函数被调用的次数。 由于它通过调用保留其值,因此您可以在每次调用该函数时将其递增。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.