- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
12.3 类的其他特性-静态成员
* * 静态类成员的提出是为了解决程序内数据共享的问题。我们知道,实现数据共享可以使用全局变量,但是这带来了不安全的因素,因为全局变量在程序的任何地方都可以更新,如果不小心将会影响程序的运行,这是由于对全局变量的可见范围无法限制的结果。为了安全起见,在C++中提供了使用静态类成员的方法实现多个对象之间的数据共享。 将类的某一个数据成员的存储型指定为静态类型时,则由该类所产生的的所有对象均共享为静态成员所分配的一个存储空间,也就是说,在说明类的对象时,并不为静态类型的成员分配空间。 12.3 静态类成员 静态数据成员是类的所有对象共享的成员,而不是某个对象的成员,可以实现多个对象之间的数据共享,并且不会破坏类的封装特性,保证了安全性。 静态数据成员的使用方法和注意事项: 1。静态数据成员在定义或说明时前面加关键字static。 private: int a, b, c; static int s; 这里,a, b,c是非静态数据成员,而s是静态数据成员。 2。必须在文件作用域中,对静态成员数据作一次且只作一次定义性说明,此时,系统为静态成员数据分配存储空间。 12.3.1 静态数据成员 3. 静态数据成员是静态存储的,它有静态生存期,必须对它进行初始化。静态数据成员初始化方法与一般数据成员不同,格式如下: 数据类型类名::静态数据成员=值; class Nclass { … private: static int a; … }; int Nclass::a=5; …. 说明: (1)静态数据成员的初始化在类体外进行,而前面不加static, 以免与一般静态变量或对象相混淆。静态数据成员的初值为0。 (2)初始化时不加成员的访问权限控制符private,public等。置初值不受静态成员数据的访问权限的限制。 (3)初始化时使用作用域运算符用来表明它所属的类,因此,静态数据成员是类的成员,而不是对象的成员。 (参见书P288例12.9) #includeiostream.h class A{ int i, j; static int x,y; public: A(int a=0,int b=0,int c=0,int d=0) { i=a; j=b; x=c; y=d;} void Show( ){ couti=i\tj=j\t; coutx=x\ty=y\n; } }; int A::x=0; //D int A::y=0; //E void main(void){ A a(2,3,4,5); a.Show( ); A b(100,200,300,400); b.Show( ); a.Show( ); } 书P288例12.9 静态成员数据的说明与使用 4。静态成员数据与全局变量一样都是静态分配存储空间的,但全局变量在程序中的任何位置都可以访问,而静态成员数据要受到访问约束。如果静态数据成员的访问权限为public,可在程序中按如下格式引用静态数据成员。 类名::静态成员名 (参见书P289例) #includeiostream.h class A{ int i,j; public: static int x; A(int a=0,int b=0){i=a; j=b;} void Show( ){ couti=i\tj=j\t; coutx=x\n; } }; int A::x; //F void main(void){ coutA::x=A::x\n; } 参见书P289例 #includeiostream.h class myclass { private: int A, B, C; static int sum; public: myclass(int a, int b, int c) { A=a; B=b; C=c; sum+=A+B+C; } void getnumber( ); void getsum( ); }; int myclass::sum=0; void myclass::getnumber( ) { coutnumber=A.B. Cendl; } void myclass::getsum( ) { coutsum=sumendl; } 例:分析下列程序的输出结果。 void main(void) { myclass M(3,7,10), N(14,9,11); M.getnumber( ); N.getnumber( );
您可能关注的文档
最近下载
- 《七巧板》完整版教学课件.pptx VIP
- 定时交通灯控制设计.pdf VIP
- 浙大中控DCS系统操作规程.doc VIP
- 学校家长安全责任书.docx VIP
- 北师大版小学数学六年级上册第二单元 分数混合运算 基础测试题.doc VIP
- 2025至2030中国食用油行业运营态势与投资前景调查研究报告.docx VIP
- 10.3 合同的变更、转让、解除和终止(政策与法律法规 第7版).pptx VIP
- 儿童肺炎支原体肺炎诊疗指南2025年版解读PPT课件.pptx VIP
- 深圳初一数学下学期期中模拟测试题(带答案).pdf VIP
- 2023年春国开(甘肃)《个人理财》形考任务1-4题库.docx
文档评论(0)