static成员变量不仅可以通过静态成员函数来改变其值,还可以通过构造函数改变其值。其中静态的构造函数仅仅能够改变静态的成员变量,一般构造函数可以改变静态成员变量或者其他成员变量。
以下是构造函数可以改变静态成员变量的值的代码;
class ATest
{
public:
ATest()
{
a=10;
}
static a;
};
int ATest::a=0;//这里不能加static
int main()
{
cout<<ATest::a<<endl;
ATest at;
cout<<at.a<<endl;
}
类里的static成员初始化:
类中的static变量是属于类的,不属于某个对象,它在整个程序的运行过程中只有一个副本,因此不能在定义对象时 对变量进行初始化,就是不能用构造函数进行初始化,其正确的初始化方法是:
数据类型 类名::静态数据成员名=值;
如上述代码中a的初始化;
但是加上const后也就是static const 或者const static的时候规则有点变化,const的成员变量只能在初始化列表中初始化的规格将消失
<pre name="code" class="cpp">class ATest
{
public:
ATest()://d(0)
{
a=10;
const static b=16; //这样可以
}
static a;
//const static int c=1;//这样不可以
const static int c;
// const int d; 这里如果加上这个必须在构造函数中加上初始化列表初始化
};
const int ATest::c=9;
//const static int ATest::c=9;//外部定义的时候不能加static
int ATest::a=0;
int main()
{
cout<<ATest::a<<endl;
ATest at;
cout<<at.a<<endl;
}