已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 C 与C 2 第三章基于对象的程序设计 续 3 Student ps1 newStudent lisi 3 17 deleteps1 ps1 name并没有删除 3 6析构函数 析构函数是构造函数的互补 为生命期即将结束的类对象自动释放资源 析构函数也是隐式自动调用的 注意 析构函数的名字是在类名前加上波浪线 它不返回任何值也没有任何参数 尽管我们可以为一个类定义多个构造函数 但是我们只能提供一个析构函数 它将被应用在类的所有对象上 classStudent private char name intage intid 4 classStudent public Student constchar str inti inta 18 Student Student constStudent Student Student delete name voidmain Studentst1 lisi 1 17 Student st2 newStudent zhangsan 2 19 deletest2 5 classStudent public intgetAge returnage intsetAge inta age a private char name intid intage constStudentst1 lisi 1 18 intage st1 getAge st1 setAge 20 3 7const成员函数 只有被声明为const的成员函数才能被一个const类对象调用 关键字const被放在成员函数的参数表和函数体之间 对于在类体之外定义的const成员函数 我们必须在它的定义和声明中同时指定关键字const 6 classStudent public intgetAge const returnage intsetAge inta age a intgetId const private char name intid intage intStudent getId const returnid constStudentst1 lisi 1 18 intage st1 getAge intid st1 getId intsetAge inta const age a 把一个修改类数据成员的函数声明为const是非法的 7 为了允许修改一个const对象的数据成员 可把相应的数据成员声明为mutable classStudent public intgetAge const returnage intsetAge inta const age a intgetId const private char name intid mutableintage 8 统计创建的所有学生对象的个数 学生人数不是任何一个具体学生的属性 具有全局性 若用一个全局变量记录学生人数 缺点 容易被误修改 不安全 容易和其它全局变量重名 3 8static成员 9 静态数据成员被当作类的全局对象 对于非静态数据成员 每个类对象都有自己的拷贝 而静态数据成员对每个类只有一个拷贝 由该类的所有对象共享访问 student hclassStudent public Student Student private char name intid mutableintage staticintcount student cpp include student h intStudent count 0 Student Student count Student Student count friendintgetCount intgetCount returnStudent count 10 classStudent public staticintgetCount returncount private char name intid mutableintage staticintcount intcount Student getCount 在静态成员函数中只能访问静态成员 11 classStudent public private char name intid mutableintage staticintcount staticconstintclass 3306 只有静态整型常量才能在头文件里初始化 staticconstchardepart 20 CSE 12 3 9操作符重载 inta b c a 1 b 1 c 1 a b c 1 classString public private int size char string Strings1 s2 s3 s4 s1 s2 s3 s4 hello 13 重载操作符使得类对象可以与操作符一起被使用 使得对类对象的操纵与内置类型的对象一样直观 重载的操作符在类体中被声明 声明方式同普通成员函数一样 只不过它的名字包含关键字operator 以及紧随其后的一个预定义操作符 3 9操作符重载 14 classString public String String String Strings1 s2 s3 s1 s2 s3 hello 15 classString public String classString friendString String 16 注意 对于内置类型的操作符 它的预定义意义不能被改变 错误 不能为int重新定义内置的操作符intoperator int int 不能为内置数据类型定义其他的操作符 预定义的操作符优先级不能被改变 17 3 10类的组合 问题 定义一个类 描述一条线段 线段具有长度 两个端点等属性线段具有求长度等行为 端点可以用另外一个表示点的类表示 线段类Line包含两个点类Point的对象 18 类的组合描述的是一个类内嵌其他类的对象作为成员的情况 它们之间的关系是一种包含与被包含的关系 classPoint public Point intxx 0 intyy 0 X xx Y yy Point Point classLine public Line Pointxp1 Pointxp2 Line Line 19 当创建类的对象时 如果这个类具有内嵌对象成员 那么各个内嵌对象将首先被自动创建 因此 在创建对象时 既要对本类的基本类型数据成员进行初始化 又要对内嵌对象成员进行初始化 Point Point Point Line Line Pointxp1 Pointxp2 p1 xp1 p2 xp2 doublex double p1 GetX p2 GetX doubley double p1 GetY p2 GetY len sqrt x x y y Line Line Line 20 intmain Pointmyp1 1 1 myp2 4 5 Lineline myp1 myp2 Lineline2 line cout Thelengthofthelineis cout line GetLen endl cout Thelengthoftheline2is cout line2 GetLen endl 如何调用Line和Point的构造函数 调用顺序 21 在创建一个组合类的对象时 不仅它自身的构造函数将被调用 而且还将调用其内嵌对象的构造函数 调用顺序为 1 调用内嵌对象的构造函数 调用顺序按照内嵌对象在组合类的声明中出现的次序 2 执行本类的构造函数 析构函数的调用顺序与构造函数刚好相反 22 Point Point Point Line Line Pointxp1 Pointxp2 p1 xp1 p2 xp2 doublex double p1 GetX p2 GetX doubley double p1 GetY p2 GetY len sqrt x x y y Line Line Line intmain Pointmyp1 1 1 myp2 4 5 Lineline myp1 myp2 Lineline2 line cout Thelengthofthelineis cout line GetLen endl cout Thelengthoftheline2is cout line2 GetLen endl 调用次数和顺序 Point Point Point 先被调用4次 Line Line Pointxp1 Pointxp2 被调用一次 Point Point Point 先被调用2次 Line Line Line 被调用一次 23 classA public voidf Bb classB public voidg Aa 两个类互相引用的情况 称为循环依赖 3 11前向引用声明 24 前向引用声明 在引用未声明的类之前 将该类的名字告诉编译器 使编译器知道这是一个类名 classB classA public voidf Bb classB public voidg Aa 25 classB classA public voidmethod x bMethod private B x By classB public voidbMethod private A z 前向引用声明虽然可以解决一些问题 但它不是万能的 尽管使用了前向引用声明 但在提供一个完整的类声明之前 不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网上学习平台
- 纪委考勤及请假管理制度
- 诺言考勤管理制度内容
- 深圳市建设工程安全生产与文明施工优良工地
- 汽车吊篮使用专项施工方案
- 静脉血栓治疗进展
- 急性脑出血及康复训练
- 铝加工厂成本控制
- 老年人跌倒的预防和护理
- 某家电厂设备维护办法
- T/CIE 162-2023工业软件技术来源检测规范
- T/CECS 10251-2022绿色建材评价金属给水排水管材管件
- 计算机应用基础(第6版)-课件 第2章 win11操作系统
- 义务教育数学课程标准(2022年版)
- 水生态修复施工组织设计方案
- 《中医养生学》课件-八段锦
- 专业技术人员年度考核表
- 2024压力容器检验员实际操作考试规程
- 南充市医疗保险特殊门诊申请表
- 和甘伯伯去游河绘本阅读
- 装饰公司绩效考核岗位职责
评论
0/150
提交评论