4.7 静态成员.ppt_第1页
4.7 静态成员.ppt_第2页
4.7 静态成员.ppt_第3页
4.7 静态成员.ppt_第4页
4.7 静态成员.ppt_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

版本号 V2006 12 东南大学07级C 程序设计 电类 copyright 柏毅 C 程序设计 第2版 第4章类与对象 静态类成员 静态类成员的提出是为了解决程序内数据共享的问题 我们知道 实现数据共享可以使用全局变量 但是这带来了不安全的因素 因为全局变量在程序的任何地方都可以更新 如果不小心将会影响程序的运行 这是由于对全局变量的可见范围无法限制的结果 为了安全起见 在C 中提供了使用静态类成员的方法实现多个对象之间的数据共享 将类的某一个数据成员的存储型指定为静态类型时 则由该类所产生的的所有对象均共享为静态成员所分配的一个存储空间 也就是说 在说明类的对象时 并不为静态类型的成员分配空间 静态数据成员是类的所有对象共享的成员 而不是某个对象的成员 可以实现多个对象之间的数据共享 并且不会破坏类的封装特性 保证了安全性 静态数据成员的使用方法和注意事项 1 静态数据成员在定义或说明时前面加关键字static private inta b c staticints 这里 a b c是非静态数据成员 而s是静态数据成员 2 必须在文件作用域中 对静态成员数据作一次且只作一次定义性说明 此时 系统为静态成员数据分配存储空间 1 静态数据成员 3 静态数据成员是静态存储的 它有静态生存期 必须对它进行初始化 静态数据成员初始化方法与一般数据成员不同 格式如下 classNclass private staticinta intNclass a 5 说明 1 静态数据成员的初始化在类体外进行 而前面不加static 以免与一般静态变量或对象相混淆 静态数据成员的初值为0 2 初始化时不加成员的访问权限控制符private public等 置初值不受静态成员数据的访问权限的限制 3 初始化时使用作用域运算符用来表明它所属的类 因此 静态数据成员是类的成员 而不是对象的成员 includeclassA inti j staticintx y public A inta 0 intb 0 intc 0 intd 0 i a j b x c y d voidShow cout i i t j j t cout x x t y y n intA x 0 DintA y 0 E 例 静态成员数据的说明与使用 voidmain void Aa 2 3 4 5 a Show Ab 100 200 300 400 b Show a Show 4 静态成员数据与全局变量一样都是静态分配存储空间的 但全局变量在程序中的任何位置都可以访问 而静态成员数据要受到访问约束 如果静态数据成员的访问权限为public 可在程序中按如下格式引用静态数据成员 includeclassA inti j public staticintx A inta 0 intb 0 i a j b voidShow cout i i t j j t cout x x n intA x Fvoidmain void cout A x A x n includeclassmyclass private intA B C staticintsum public myclass inta intb intc A a B b C c sum A B C voidgetnumber voidgetsum 例 分析下列程序的输出结果 voidmain void myclassM 3 7 10 N 14 9 11 M getnumber N getnumber M getsum N getsum intmyclass sum 0 voidmyclass getnumber cout number A B C endl voidmyclass getsum cout sum sum endl 从输出结果可以看到sum的值对M对象和对N对象都是相等的 这是因为在初始化M对象时 将M对象的三个int型数据成员的值求和后赋给了sum 于是sum保存了该值 在初始化N对象时 又将N对象的三个int型数据成员的值求和后加到sum已有的值上 于是sum将保存加后的值 所以 不论是通过对象M还是通过对象N来引用sum的值都是一样的 即为54 例 利用静态成员数据作为产生对象的计数器 includeclassA inti staticintcount public A inta 0 i a count cout NumberofObjects count n A count cout NumberofObjects count n voidSetData inta i a voidShow cout i i n cout count count n intA count voidmain void Aa1 100 Ab 2 与静态数据成员一样 可以将类的成员函数定义为静态的 这就是静态成员函数 方法同样是使用关键字static 关于静态成员函数的几点说明 1 在静态成员函数的定义中 可以引用类中说明的静态成员 但不能直接引用类中说明的非静态成员 如果静态成员函数中要引用非静态成员时 则必须通过类的对象来引用 2 对于public定义的静态成员函数 类外的代码可以与静态数据成员一样利用类名和作用域分辨符 调用静态成员函数 格式如下 2静态函数成员 includeclassA inti staticintcount public A inta 0 i a count cout NumberofObjects count n A count cout NumberofObjects count n staticvoidSetData inta A 例 定义和使用静态成员函数 intA count voidmain void Aa1 100 A Show a1 A SetData 300 a1 A Show a1 Ab 2 运行结果如下 NumberofObjects 1i 100count 1i 300count 1NumberofObjects 2NumberofObjects 3NumberofObjects 2NumberofObjects 1NumberofObjects 0 3 静态成员函数的实现部分在类定义之外定义时 前面不必加修饰词static 这是因为关键字static不是数据类型的组成部分 4 可以将静态成员函数定义为内联 inline 但不能将其定义为虚函数 因为静态成员函数是在编译时分配存储空间的 所以在程序中不能提供多态性 includeclassM private intA staticintB public M inta A a B a staticvoidf1 Mm voidM f1 Mm cout A m A endl co

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论