




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章类的更多功能 内容提要对象的指针与引用类的静态成员复制构造函数 4 1 2 3 上机操作为主 课堂讲解为辅 鼓励读书自学 提倡上机实践 9 1对象数组 对象数组 用类类型声明的数组 classCStudent CStudentban 80 对象数组的每个数组元素都是一个对象创建每个对象ban i 数组元素 时都会调用构造函数进行初始化 9 2对象的指针与引用 对象比较大 包含很多数据 时 进行值传递要复制整个对象 耗时且占空间有没有不复制整个对象的方法 传递对象的地址和引用9 2 1对象的指针声明类对象的指针变量 地址变量 CStudent p 0 什么含义 将对象的地址保存到指针变量CStudents5 p 什么含义 通过对象指针访问对象成员 用间接访问符 includeusingnamespacestd include student h 包含类的定义intmain CStudents5 p 0 声明对象 对象指针p 例 9 2 2对象的引用 复习 引用是一个变量的别名int includeusingnamespacestd include student h 包含类的定义intmain CStudents1 s2 charna1 ZhangSan s1 input 10201 na1 75 charna2 LiSi s2 input 10202 na2 85 pare s2 return0 9 3this指针 this指针 成员函数在执行时都有隐含的this指针 指向调用该成员函数的对象也可以显式地使用this指针voidCStudent compare CStudent 9 4类的静态成员 9 4 1静态数据成员使用关键字static将 需要共享的 数据成员声明为类的静态数据成员静态数据成员可以通过名字解析运算符 来访问静态数据成员的提出是为了解决数据共享的问题可看成是一个全局变量例如 将鼠标的位置 状态及其操作封装为一个类 不管该类有多少个对象 鼠标始终只有一个 所有的该类对象共享鼠标的位置 状态等数据成员的值 类的静态成员在存储空间有且只有一份即使没有创建任何一个该类对象 不管有多少个该类的对象存在 访问静态数据成员 通过类名访问 类的对象访问classA public staticintx y intA x 5 A y 10 voidmain inta b a A x b A y 通过什么访问 必须在创建任何对象前初始化静态成员对上面的类A的静态成员x y初始化的方法如下 intA x 5 intA y 10 若整个程序分为多个源程序文件进行分块编译 应将静态成员的初始化放在某一个源文件中 如果将静态变量的初始化放在头文件中被多个源程序文件包含 将导致变量的重复定义 静态成员初始化 includeclassCX public staticinta intb intCX a 0 类型说明int不能少voidmain CXx1 x2 x1 a 10 x1 b 20 通过什么访问 x2 a 5 x2 b 5 cout x1 a x1 b n cout x2 a x2 b n 运行结果 5 205 5 例 静态成员 一个类的静态成员函数与非静态成员函数不同 它不需要创建任何该类的对象即可以被调用 静态成员函数只能访问静态的数据成员不能访问非静态的数据成员 非静态的成员函数该类对象还没创建 成员也没创建要通过某个该类对象才能访问非静态的数据成员 9 4 2静态成员函数 classCX staticinta intb public staticvoidfun inti intj CX p CX a 0 错误 intCX a 0 voidCX fun inti intj CX p b i 错误 不知b引用的对象a j 正确 a为静态成员p b i 正确 指定了被引用的对象 静态成员函数在被调用时可以通过指定的对象来进行 也可以通过名字解析运算符来直接调用例如 CXx y p 9 5复制构造函数 普通变量复制 inta 10 intb a 类的对象复制 intmain CStudents1 10201 ZhangSan 0 CStudents3 s1 s3 display 创建s1调用构造函数进行初始化 创建新对象s2时怎么初始化 复制初始化 编译器提供默认的复制构造函数 将对象s1的数据成员 值 一个一个地复制到对象s2 自定义的复制构造函数 为什么需要定义自已的复制构造函数 当类中包含数组 指针类型时 单纯复制的话 两个对象中的指针都指向同一段内存 相同地址 如s1和s2的name指向同一内存 ZhangSan 如果其中一个对象s1被消毁了 这时对象s1中指针所指向的内存也同样被消毁 但另一个对象s2不知道这种情况 这时就会出现问题 类中添加一个复制构造函数 代替编译器提供的复制构造函数形式 fun constfun 使用编译器的复制构造函数 intmain CStudents2 10202 LiSi 90 构造函数初始化s2 display 显示10202LiSi90CStudents3 s1 对象复制 调用复制构造函数s3 display 显示10202LiSi90s3 setname WangWu 修改新对象中名字s3 display 显示10202WangWu90s1 display 显示10202WangWu90 复制构造函数复制每一个数据成员s3 number s1 number 复制s3 score s1 score 复制s3 name s1 name 复制的是什么 例 类的对象复制 classCStudent public CStudent 缺省构造函数CStudent constCStudent 续 复制构造函数实现代码 代替编译器提供的默认复制构造函数CStudent CStudent constCStudent 续 主函数 完成对象复制 intmain CStudents2 10202 LiSi 90 构造函数初始化s2 display 显示10202LiSi90CS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 锻造知识培训课件
- 2025年3D打印技术的医疗成本效益
- 年产20万套金属冲压成型件、500套金属模具迁建项目环评报告表
- 锦瑟课件简短
- 口腔医生执业技能实操考核试卷及答案
- 山高环能:最近一年的财务报告及其审计报告以及最近一期的财务报告
- 杭州利珀科技股份有限公司审计报告
- 锅炉设计知识培训总结
- 脊柱骨折与脊髓损伤课件
- 脊柱解剖课件
- 卡西欧PROTREKPRW-6000使用手册
- 物流网络规划与设计课件
- JB∕T 5245.4-2017 台式钻床 第4部分:技术条件
- 鞘膜积液的护理查房
- 《水工监测工》习题集最新测试题含答案
- 大金D型水冷螺杆机说明书
- 部编版三年级上册道德与法治第一单元第1课《学习伴我成长》课件
- ASCO双电源自动转换开关操作手册
- 组合式塔吊基础施工专项方案(117页)
- 1、《国际贸易实务》课程标准解析
- 现场临电方案改
评论
0/150
提交评论