从上例的输出可以看出:无论哪个对象,其成员 nCount的值 均是相同的。实际上,所有对象中的该成员根本就是同一个变 量 本例中该变量的值为4是类定义和所创建的对象个数所决定 的:这里将 nCount设计成了一个对象计数器,其初值为0 每创建一个对象其值就加一(参见类X的构造函数);而每 当一个对象被撤消其值就减一(参见类X的析构函数)。 由于 n Count是一个所有X类对象共享的数据成员,从理论上 讲它不属于任何一个对象。因此,对该成员的访问以如下的形 式进行将显得更为合理: n=∷ Counto; cout <<X: Count( < endl
从上例的输出可以看出:无论哪个对象,其成员 nCount 的值 均是相同的。实际上,所有对象中的该成员根本就是同一个变 量。 本例中该变量的值为 4 是类定义和所创建的对象个数所决定 的:这里将 nCount 设计成了一个对象计数器,其初值为 0。 每创建一个对象其值就加一(参见类 X 的构造函数);而每 当一个对象被撤消其值就减一(参见类 X 的析构函数)。 由于 nCount 是一个所有 X 类对象共享的数据成员,从理论上 讲它不属于任何一个对象。因此,对该成员的访问以如下的形 式进行将显得更为合理: n = X :: Count(); cout << X :: Count() << endl;
11.32静态成员函数 与静态数据成员相同,静态成员函数是类中说明的、用关键字 static修饰的成员函数。 般讲,若类中存在静态数据成员,则访问该数据成员的成员 函数应当说明成静态的。以便为共享的数据提供共享的接口 应当说明的是: 1.由于关键字 static不是数据类型的组成部分,所以在类外 定义静态成员函数时不需要该关键字。 2.由于静态成员函数没有ths指钋,所以对于那些需要访问 类中其它非静态成员的静态成员函数,必须带有一个同类对象 或引用参数。 3.静态成员函数只能访问类中的静态数据成员(除非函数带 有相应的参数),而非静态成员函数则可以访问类中的任何成 员
11.3.2 静态成员函数 与静态数据成员相同,静态成员函数是类中说明的、用关键字 static 修饰的成员函数。 一般讲,若类中存在静态数据成员,则访问该数据成员的成员 函数应当说明成静态的。以便为共享的数据提供共享的接口。 应当说明的是: 1. 由于关键字 static 不是数据类型的组成部分,所以在类外 定义静态成员函数时不需要该关键字。 2. 由于静态成员函数没有 this 指针,所以对于那些需要访问 类中其它非静态成员的静态成员函数,必须带有一个同类对象 或引用参数。 3. 静态成员函数只能访问类中的静态数据成员(除非函数带 有相应的参数),而非静态成员函数则可以访问类中的任何成 员
H SFCLSH class x I int d static int nCount public X(int a=0): d(a) n Count + ~×0 n Count void Set(int a) d=a;} int Geto return d static int Counto I return nCount int X,. nCount =0
// SFCLS.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; } static int Count() { return nCount; } }; int X :: nCount = 0;
∥/ TSFCLS. CPP include <ⅰ ostream.h> #include sfcs. h 程序的输出为: 0 void maino aXd=1001 cout <<X: Count( < endl Xax(100); cout <<aX. d ="<<aX. Get(<<'It<<X: Count( < endl
// TSFCLS.CPP #include <iostream.h> #include "sfcls.h" void main() { cout << X :: Count() << endl; X aX(100); cout << "aX.d = " << aX.Get() << '\t' << X :: Count() << endl; } 程序的输出为: 0 aX.d = 100 1
114 const, volatile对象和成员函数 对象 key word class name obj name, 函数 type func name( arg list) key word; 其中: key word或者是 const,或者是 volatile。用前者修饰 的对象或成员函数叫做 const(常)对象或成员函数;用后者 修饰的对象或函数叫做 volatile(易变入对象或成员函数。通 过常对象只能访问类中的常成员函数;通过易变对象只能访问 类中的易变成员函数。 由于易变对象和成员函数很少使用,下而仅举例说明常对象和 成员函数的作用
11.4 const,volatile 对象和成员函数 对象 key_word class_name obj_name; 函数 type func_name(<arg_list>) key_word; 其中:key_word 或者是 const,或者是 volatile。用前者修饰 的对象或成员函数叫做 const(常)对象或成员函数;用后者 修饰的对象或函数叫做 volatile(易变)对象或成员函数。通 过常对象只能访问类中的常成员函数;通过易变对象只能访问 类中的易变成员函数。 由于易变对象和成员函数很少使用,下而仅举例说明常对象和 成员函数的作用