13.1.6 静态成员
静态成员是用static修饰的成员,属性和函数都可以被说明是静态的。被定义为静态的属性或函数,在类的各个实例间是共享的,不会为每个类的实例都创建一个静态成员的实现。静态数据成员是一种特殊的属性,在定义类对象时,不会为每个类对象复制一份静态数据成员,而是让所有的类对象都共享一份静态数据成员备份。其定义格式如下:
- static <数据类型> <属性名称>;
静态成员函数的声明方式如下所示。
- static <返回类型> <成员函数名称>(<参数列表>);
一般来讲,在静态函数中访问的基本上是静态数据成员或全局变量。
【示例13-11】 下述代码中的类定义了静态属性counter和静态函数表示目前的学生人数,更改student类的构造函数,id为系统根据counter自动分配。
- class student
- {
- private:
- static int counter;
- int id;
- public:
- student();
- void show();
- static void setcounter(int);
-
- };
- int student::counter=1;
- student::student()
- {
- id=counter++;
- }
- void student::show()
- {
- cout<<id<<endl;
- }
- void student::setcounter(int new_counter)
- {
- counter=new_counter;
- }
- void main()
- {
- student s1;
- s1.show();
- student s2;
- s2.show();
- student s3;
- s3.show();
- s1.setcounter(10);
- student s4;
- s4.show();
- student s5;
- s5.show();
- }
程序运行结果如下:
- 1
- 2
- 3
- 10
- 11
分析:该示例定义了一个静态属性counter和一个静态函数setcounter。counter是一个计数器,它在类的所有对象间共享。因此当对象s1被创建时,counter被初始化为1,接下来的对象s2和s3中counter都是自动增加counter的值。函数setcounter()用来修改counter,counter也只能被静态成员函数setcounter修改。修改counter值后,对象s4和s5就从10开始计数。
【责任编辑:
云霞 TEL:(010)68476606】