静态成员
类的一般数据成员,每个对象都有这样一组数据成员,它们的空间是独立的。C++的类还有一种特殊的成员,它的空间是这个类的所有对象共享的,称为类静态数据成员。
这里n的空间在整个程序里面只有一个,t1,t2共享同一个n。
静态数据成员需要声明和定义。初始化不是在构造函数中进行,而是在定义的时候进行。访问静态数据成员可以和一般成员一样,通过对象名来访问,也可以不通过对象直接用类名来访问。
1 class task {
2 public:
3 task() : x(n) { n++; }
4 ~task() { n--; }
5 int x;
6 static unsigned n;
7 };
8 unsigned task::n = 1;// 初始化
9
10 int main() {
11 cout << task::n << endl;
12 task s1;
13 cout << s1.x << s1.n << endl;
14 task s2;
15 cout << s1.x << s1.n << endl;
16 cout << s2.x << s2.n << endl;
17 cout << task::n << endl;
18 }
静态成员函数是只能访问静态成员(包括静态数据成员和静态成员函数)的成员函数。
静态成员用法举例:写一个类Singleton,这个类只能存在一个对象。
统计所有学生的平均成绩:
1 class student {
2 string name;
3 string num;
4 float score;
5 static float sum;
6 static int count;
7 public:
8 student(string na, string nu, float sc)
9 : name(na), num(nu), score(sc) {
10 count ++;
11 sum += score;
12 }
13 static float average() {
14 return sum / count;
15 }
16 };
17
18 float student::sum = 0;
19 int student::count = 0;
20
21 int main() {
22 cout << student::average();
23 student a("Jack", "0511001", 59);
24 cout << a.average() << Student::average();
25 student b("Lisa", "0511002", 99);
26 cout << a.average() << b.average() << Student::average();
27 }