113静态成员 类实际上就是一种用户定义的数据类型。每当生成一个某一类 的对象时,系统就为该对象分配一块内存来存放其所有成员 (从理论上讲,包括所有成员函数)。然而,在实际应用中, 常常希望程序中所有同一类的对象共享某一成员(通常指数据 成员,比如,同一学校中所以学生对象中的学校名称成员) 以保证数据的一致性及简化操作。解决这一问题的一个办法就 是将需要共享的数据说明成全局变量,但这样作将破坏数据的 封装性。更好的解决办法就是将需要共享的成员说明成类中的 静态成员
11.3 静态成员 类实际上就是一种用户定义的数据类型。每当生成一个某一类 的对象时,系统就为该对象分配一块内存来存放其所有成员 (从理论上讲,包括所有成员函数)。然而,在实际应用中, 常常希望程序中所有同一类的对象共享某一成员(通常指数据 成员,比如,同一学校中所以学生对象中的学校名称成员), 以保证数据的一致性及简化操作。解决这一问题的一个办法就 是将需要共享的数据说明成全局变量,但这样作将破坏数据的 封装性。更好的解决办法就是将需要共享的成员说明成类中的 静态成员
113.1静态数据成员 静态数据成员是指在类中说明的、用关键字 static修饰的数据 成员。例: class x I static int S;、∥引用性说明 t X, s ∥定义性说明 在类中说明的静态成员属于引用性说明,必须在类外对其进 定义性说明(说明时还可以对其进行初始化,定义性说明时不 得带关键字 static)。所以需要这样做是因为静态成员不属于 任何一个对象,而为所有同类对象所共享
11.3.1 静态数据成员 静态数据成员是指在类中说明的、用关键字 static 修饰的数据 成员。例: class X { int d; static int s; // 引用性说明 //… }; int X :: s; // 定义性说明 在类中说明的静态成员属于引用性说明,必须在类外对其进行 定义性说明(说明时还可以对其进行初始化,定义性说明时不 得带关键字 static)。所以需要这样做是因为静态成员不属于 任何一个对象,而为所有同类对象所共享
∥ SDCLS.H class x t nt d static int n Count: public X(int a=0): d(a)t nCount ++ y 0 n Count void Set(int a d=a;} int Geto return d Counto return nCount int X:: nCount =0
// SDCLS.H class X { int d; static int nCount; public: X(int a = 0) : d(a) { nCount ++; } ~X() { nCount --; } void Set(int a) { d = a; } int Get() { return d; } int Count() { return nCount; } }; int X :: nCount = 0;
∥/ TSDCLS. CPP include <iostream.h> include sdcls. h void maino ⅩXArr3],ax(100); for(=0;i<3;i+) XArr[ Set(i*i) for(=0;i<3;i++) cout << XArrl"<<i<<"].d="<<XArr[]. Get( <<It
// TSDCLS.CPP #include <iostream.h> #include "sdcls.h" void main() { X xArr[3], aX(100); int i; for(i = 0; i < 3; i ++) xArr[i].Set(i * i); for(i = 0; i < 3; i ++) cout << "xArr[" << i << "].d = " << xArr[i].Get() << '\t';
cout < XArr["<<i<< ]. n Count ="< XArr[]. Counto < endl cout < axd="<< aX. Get(<<It cout <<axnCount =" <<aX Counto<< endl; 该程序的输出为: XArr[O]. d =0 XArr[o]. nCount= 4 XArr[1].d=1 XArr[1].nCount 4 XArr[2]. d =4 XArr[2]. nCount =4 ax.d=100 aX. n count 4
cout << "xArr[" << i << "].nCount = " << xArr[i].Count() << endl; } cout << "aX.d = " << aX.Get() << '\t'; cout << "aX.nCount = " << aX.Count() << endl; } 该程序的输出为: xArr[0].d = 0 xArr[0].nCount = 4 xArr[1].d = 1 xArr[1].nCount = 4 xArr[2].d = 4 xArr[2].nCount = 4 aX.d = 100 aX.nCount = 4