要点:
1.静态成员变量必须在类的声明外进行初始化,一般在类的cpp文件初始化(在任何的大括号的外面);编译器不会自动对其初始化;
2.静态成员须用类名直接访问,不能有对象进行访问;
3.静态成员可以由静态函数访问,也可以由非静态函数访问;但是,静态函数只能访问静态成员,不能访问非静态成员。
欢迎大家批评指正...
http://blog.youkuaiyun.com/pbmichael/
#include
<
iostream
>
using namespace std;
class sha{
static int a; // static成员变量
int b;
public :
void set ( int i, int j) // 非static访问static成员变量
{
a = i;
b = j;
}
void show();
};
int sha::a = 0 ; // 在类的声明外,对static成员变量进行初始化
void sha::show()
{
cout << " This is a static variable: a= " << a << endl;
cout << " This is a non-static variable: b= " << b << endl;
}
int main()
{
sha x,y;
x. set ( 1 , 1 );
x.show(); // 此时输出1,1
y. set ( 2 , 2 );
y.show(); // 此时输出2,2
x.show(); // 此时输出2,1. 变量 a 的值发生了变化
// 说明类sha的不同对象的static变量,共用同一内存!
return 0 ;
}
using namespace std;
class sha{
static int a; // static成员变量
int b;
public :
void set ( int i, int j) // 非static访问static成员变量
{
a = i;
b = j;
}
void show();
};
int sha::a = 0 ; // 在类的声明外,对static成员变量进行初始化
void sha::show()
{
cout << " This is a static variable: a= " << a << endl;
cout << " This is a non-static variable: b= " << b << endl;
}
int main()
{
sha x,y;
x. set ( 1 , 1 );
x.show(); // 此时输出1,1
y. set ( 2 , 2 );
y.show(); // 此时输出2,2
x.show(); // 此时输出2,1. 变量 a 的值发生了变化
// 说明类sha的不同对象的static变量,共用同一内存!
return 0 ;
}
输出结果:
This is a static variable: a=1
This is a non-static variable: b=1
This is a static variable: a=2
This is a non-static variable: b=2
This is a static variable: a=2
This is a non-static variable: b=1