静态类成员变量和静态变量之间的主要区别是什么? 静态类成员和静态变量都可以从任何类的成员函数访问。静态类成员和静态变量的具体用途是什么?
答案 0 :(得分:4)
唯一的原因是代码清洁。您不能限制对
等全局静态变量的访问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);
添加最少: 如果你应该使用静态是complete other discussion。
答案 1 :(得分:1)
从成员访问静态类成员和静态变量 任何阶级的职能。
事实并非如此:
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;
使用:如果你希望变量在两种情况下一直存活到程序结束,但静态成员变量可以访问该类的私有部分。
答案 2 :(得分:0)
我们可以使用static关键字定义类成员static。当我们将类的成员声明为static时,意味着无论创建了多少个类的对象,都只有一个静态成员的副本。
如果您声明一个静态成员public,那么您也可以在没有成员函数的情况下访问它。静态与变量的范围无关。它仅指定存储持续时间..
静态成员由类的所有对象共享。如果没有其他初始化,则在创建第一个对象时,所有静态数据都将初始化为零。
答案 3 :(得分:0)
我的差异列表:
想不出别的什么。
答案 4 :(得分:0)
静态类成员用于在类的不同实例之间共享数据。这些成员的存储只分配一次,并且只有静态成员的这个实例才可用于该类的所有对象。
函数内的静态变量是通过函数调用保留其值的变量。 一个经典而简单的示例是函数中的int类型静态计数器,您希望跟踪此函数的调用次数。由于这通过调用保留其值,因此每次调用时都可以在函数内增加它。