版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第十四章 静态成员与友元 假设想让类的一切对象在类的范围内共享某个数据,声明为static的类成员便能在类范围中共享,称之为静态成员。15.1 静态成员的运用 成员有数据成员和成员函数之分,静态成员也有静态数据成员和静态成员函数之分。静态成员用static声明。 例如,下面的程序在类中定义了一个静态数据成员和一个静态成员函数,在它的构造函数和析构函数中对静态数据成员进展操作,在运用程序中,调用了静态成员函数:#include #include class Studentpublic: Student(char* pName =no name) cout create one studentn
2、; strcpy(name, pName); noOfStudents+; /静态成员:每创建一个对象,学 生人数增1 cout noOfStudents endl; Student() cout destruct one studentn; noOfStudents-; /每析构一个对象,学生人数减1 cout noOfStudents endl; static int number() /静态成员函数 return noOfStudents; protected: static int noOfStudents; /假设写成noOfStudents=0;那么非法 char name40;i
3、nt Student:noOfStudents =0; /静态数据成员在类外分配空间和初始化void fn() Student s1; Student s2; cout Student:number() endl; /调用静态成员函数用类名引导void main() fn(); cout Student:number() endl; /调用静态成员函数用类名引导 数据成员noOfStudents,既不是对象s1也不是对象s2的一部分。Student类随着对象的产生,每个对象都有一个name成员值,但无论对象有多少,甚至没有,静态成员noOfStudents也只需一个。一切Student对象都共
4、享它,并且可以访问它。 在Student对象空间中,是没有静态数据成员noOfStudents的,它的空间分配并不在Student的构造函数里完成,并且空间回收也不在类的析构函数里完成。静态数据成员在程序开场运转时就存在了。15.2 静态数据成员 公共静态数据成员可被类的外部访问,维护或私有静态数据成员可被类的内部访问。 例如,下面的代码描画一个公共的静态数据成员: class Student public: Student() noOfStudents+; / static int noOfStudents; /公共静态数据成员 / ; void fn(Student& s1,Stu
5、dent& s2) couts1.noOfStudents; /此处也可以访问静态数据成员 在类的外部,访问静态数据成员的方式可以是s1.noOfStudents,它等价于s2.noOfStudents,更通常的用法是Student:noOfStudents(不能用Student.noOfStudents)。其意义是,静态数据成员是属于Student类的,而不是属于哪个特定对象的,它也不需求依赖某个特定对象的数据。 静态数据成员用得比较多的场所普通为: (1) 用来保管流动变化的对象个数; (2) 作为一个标志,指示一个特定的动作能否发生; (3) 一个指向一个链表第一成员或最后一个成
6、员的指针. 例如,下面的程序描画一个学生类,该类对象是一个个的学生,它们构成一个单向链表: #include #include class Student public: Student(char* pName); Student(); protected: static Student* pFirst; Student* pNext; char name40; ; Student* Student:pFirst =0; Student:Student(char* pName) strncpy(name,pName,sizeof(name); namesizeof(name)-1 =0; pN
7、ext =pFirst; /每新建一个结点(对象),就将其 挂在链首 pFirst =this; Student:Student() cout name pNext) if(pS-pNext=this) /找到时,pS指向当前结点的结点 pS-pNext=pNext; /pNext即this-pNext return; Student* fn() Student* pS =new Student(Jenny); Student sb(Jone); return pS;void main() Student sa(Jamsa); Student* sb =fn(); Student sc(Tra
8、cey); delete sb;15.3 静态成员函数 静态成员函数定义是类的内部实现,属于类定义的一部分。它的定义位置与普通成员函数一样。 与静态数据成员一样,静态成员函数与类相联络,不与类的对象相联络,所以访问静态成员函数时,不需求对象。假设用对象去援用静态成员函数,只是用其类型。 例如,下面的程序,两种调用静态成员函数的方法都是合法的,而且意义一样: #include class Student public: static int number() return noOfStudents; /. protected: char name40; static int noOfStuden
9、ts; ; int Student:noOfStudents = 1; void main() Student s; cout s.number() endl; /ok 用对象援用 静态成员函数 cout Student:number() endl; /ok 用类名引导静态成员函数 运转结果为: 1 1 静态成员函数与非静态成员函数的根本区别是什么? 它们的根本区别在于静态成员函数没有this指针,而非静态成员函数有一个指向当前对象的指针this。 例如: class Sc public: void nsfn(int a); /像声明Sc:nsfn(Sc* this,int a); stati
10、c void sfn(int a); /无this指针 / void f(Sc& s) s.nsfn(10); /转换为Sc:nsfn(&s,10) s.sfn(10); /转换为Sc:sfn(10) 函数nsfn()可被以为它声明为void Sc:nsfn(Sc* this,int a)。对nsfn()的调用,编译像注解的那样进展转换,s的地址作为第一个传送的参数。 在函数内部,Sc:nsfn()对非静态成员的访问将自动地把this参数作为指向当前对象的指针。而当Sc:sfn()被调用时,没有任何对象的地址被传送。15.4 需求友元的缘由 友元函数完全是普通的C+函数,不同的是,它可以访问类的维护或私有成员,方便编程,提高了效率,但却破坏了类的封装。15.5 友元的运用 在类里声明一个普通函数,标上关键字friend,就
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度光伏发电项目合作合同研究2篇
- 2024年度奢侈品买卖与代理合同
- 2024中国石化金陵石化分公司毕业生招聘40人易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国电力建设集团河北工程限公司招聘70人易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国电信江西公司校园招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国海油春季校园招聘笔试易考易错模拟试题(共500题)试卷后附参考答案
- 2024年度船舶制造起重机安装调试合同
- 2024中国出口信用保险公司宁波分公司劳务派遣员工招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2024年度橱柜企业与物流公司仓储运输合同
- 2024下半年江苏淮安市淮阴区招聘编外用工人员和部分国企人员16人易考易错模拟试题(共500题)试卷后附参考答案
- 2024年广东省公务员考试《行测》真题及答案解析
- 2024年劳动合同(高管)
- 2024年11月绍兴市2025届高三选考科目诊断性考试(一模) 化学试卷(含答案)
- 大学生魅力讲话实操学习通超星期末考试答案章节答案2024年
- 孔竖笛市场环境与对策分析
- 试剂售后的承诺书(3篇)
- 六年级计算题 分数混合运算专项练习430题
- 2024年度中国主要城市通勤监测报告-中规智库
- 七年级历史上册知识点归纳(2024)-2024-2025学年七年级历史上册
- 校园监控系统设计方案
- 天津市勘察设计院集团有限公司招聘笔试题库2024
评论
0/150
提交评论