在类中,静态成员分为静态数据成员和静态成员函数吗,本文主要对它们的基本概念和使用进行总结。一、静态数据成员
静态数据成员是类所有对象共享的成员,而不是某个对象的成员。使用静态数据成员可以节省内存,因为它是所有对象所共有的,只需要存储在一处,供所有对象共用。静态数据成员的值对每个对象都是一样的,但它的值是可以更新的。静态数据成员使用方法和注意事项如下:(1)静态数据成员在定义或说明时前面加关键字static。(2)静态数据成员初始化与一般数据成员不同,静态数据成员初始化格式如下:
数据类型类名::静态数据成员名=值;
这表明:初始化在类体外进行,而前面不加static,以免与一般静态变量或对象混淆;初始化时不需要加该成员访问控制符如private,public等;初始化时使用作用域运算符来标明它所属的类,因此,静态数据成员是类的成员,而不是对象的成员。(3)静态成员必须进行初始化。(4)引用静态数据成员时,既可以通过对象引用,也可以采用如下格式:
类名::静态数据成员名。
例如,有如下程序:
该程序的执行结果如下:
从中可以看到,不同对象都有自己的数据成员(如s1的n为1,s2的n为3),但都共享静态数据成员(对于所有对象,m均为9)。
二、静态成员函数
静态成员函数和静态数据成员一样,都属于类的静态成员,都不是对象成员。因此,对静态成员的引用不需要对象名。在静态成员函数的实现中不能直接引用类中说明的非静态成员,但可以引用类中说明的静态成员。如果静态成员函数中要引用非静态成员时,则可通过对象来引用。调用静态成员函数时既可以通过对象来调用,也可以通过类来调用。如下代码:
在Sample类中,说明并定义了静态成员函数disp()。在该函数的实现中,使用类的非静态成员(n)是通过对象(c)进行的,因为在类的静态成员函数中不能直接引用类的非静态数据成员,只能直接引用类的静态数据成员。
三、习题与解析
1、下述静态数据成员的特征中,()是错误的。A.定义静态数据成员时前边要加修饰符staticB.静态数据成员要在类体外进行初始化C.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符D.静态数据成员不是所有对象所共用的。
解析:静态数据成员是类数据成员,为所有对象所共用。本题答案为D。但在类中仍可以像非静态数据成员一样赋值。