类中的静态变量
由于声明为static的变量只被初始化一次,因为它们在单独的静态存储中分配了空间,因此类中的静态变量由对象共享。对于不同的对象,不能有相同静态变量的多个副本。也是因为这个原因,静态变量不能使用构造函数初始化。
#include<iostream> 
using namespace std;

class Apple
{
public:
static int i;

Apple()
{
// Do nothing
};
};

int main()
{
Apple obj1;
Apple obj2;
obj1.i =2;
obj2.i = 3;

// prints value of i
cout << obj1.i<<" "<<obj2.i;
}
您可以在上面的程序中看到我们已经尝试为多个对象创建静态变量i的多个副本。但这并没有发生。因此,类中的静态变量应由用户使用类外的类名和范围解析运算符显式初始化,如下所示:
#include<iostream>
using namespace std;

class Apple
{
public:
static int i;

Apple()
{
// Do nothing
};
};

int Apple::i = 1;

int main()
{
Apple obj;
// prints value of i
cout << obj.i;
}