当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

《C++语言》课程教学资源(PPT课件讲稿)第十一章(11-3)静态成员

资源类别:文库,文档格式:PPS,文档页数:28,文件大小:82.5KB,团购合买
11.3静态成员 类实际上就是一种用户定义的数据类型。每当生成一个某一类 的对象时,系统就为该对象分配一块内存来存放其所有成员( 从理论上讲,包括所有成员函数)。然而,在实际应用中,常 常希望程序中所有同一类的对象共享某一成员(通常指数据成 员,比如,同一学校中所以学生对象中的学校名称成员),以 保证数据的一致性及简化操作。解决这一问题的一个办法就是 将需要共享的数据说明成全局变量,但这样作将破坏数据的封 装性。更好的解决办法就是将需要共享的成员说明成类中的静 态成员。
点击下载完整版文档(PPS)

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 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 #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

从上例的输出可以看出:无论哪个对象,其成员 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 #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 #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() key_word; 其中:key_word 或者是 const,或者是 volatile。用前者修饰 的对象或成员函数叫做 const(常)对象或成员函数;用后者 修饰的对象或函数叫做 volatile(易变)对象或成员函数。通 过常对象只能访问类中的常成员函数;通过易变对象只能访问 类中的易变成员函数。 由于易变对象和成员函数很少使用,下而仅举例说明常对象和 成员函数的作用

点击下载完整版文档(PPS)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共28页,试读已结束,阅读完整版请下载
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有