已阅读5页,还剩85页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 回顾 第2章类和对象对象 对象的两个要素类面向对象程序设计的三大特性类的定义对象的定义与使用 第3章 关于类和对象的进一步讨论 3 本章内容 3 1构造函数3 2析构函数3 3调用构造函数和析构函数的顺序3 4对象数组3 5对象指针3 6共用数据的保护3 7对象的动态建立和释放 4 本章内容 3 8对象的赋值和复制3 9静态成员3 10友员3 11函数模板与类模板 5 目标 理解构造函数与析构函数的作用 熟练掌握构造函数和析构函数的定义和使用 掌握对象数组 对象指针的使用 以及对象的动态建立与释放 了解对象的赋值与复制理解静态成员和友元的作用熟练掌握静态成员和友元的定义与使用了解函数模板与类模板的定义与使用 6 本章内容 3 1构造函数3 2析构函数3 3调用构造函数和析构函数的顺序3 4对象数组3 5对象指针3 6共用数据的保护3 7对象的动态建立和释放 7 3 1构造函数 3 1 1对象的初始化定义对象时最好能给对象的数据成员进行初始化 但不能在类的声明中进行 例如 classTime private inth 0 错误 类是个抽象的自定义数据类型 不占存储空间 无法存储数据 8 3 1构造函数 3 1 2构造函数的作用构造函数是类中一种特殊的成员函数 构造函数的作用是在系统创建对象时 给对象的数据成员进行初始化 格式 类名 参数表 函数体 注意类外定义的格式 9 3 1构造函数 3 1 2构造函数的作用构造函数的特点1 构造函数名字必须与类名相同 不具有任何类型 也不返回任何值 2 构造函数的权限必须是public 3 构造函数不需要也不能被用户调用 而是在建立对象时由系统自动调用执行 4 每个类都必须有一个构造函数 用户没有定义时 系统会自动生成一个空的构造函数 10 3 1构造函数 3 1 3无参和带参的构造函数 一 无参数的构造函数 默认构造函数 格式 类名 数据成员 初始值 对象的定义格式 类名对象名 11 3 1构造函数 3 1 3无参和带参的构造函数 二 带参数的构造函数类名 类型1参数1 类型2参数2 数据成员1 参数1 数据成员2 参数2 对象的定义格式为 类名对象名 实参1 实参2 12 3 1构造函数 3 1 4用参数初始化表对数据成员初始化参数初始化表 对数据成员的初始化放在函数首部实现 格式 类名 类型1参数1 类型2参数2 数据成员1 参数1 数据成员2 参数2 对象的定义格式为 类名对象名 实参1 实参2 13 3 1构造函数 3 1 5构造函数的重载定义在一个类中可以定义多个构造函数 其参数的个数 顺序或类型不相同 调用建立对象时 系统将根据对象的实参个数 类型去匹配对应的构造函数 14 3 1构造函数 3 1 6带默认参数的构造函数格式 类名 类型1参数1 默认值1 类型2参数2 默认值2 数据成员1 参数1 数据成员2 参数2 15 构造函数补充说明 在调用构造函数时 不必给出实参的构造函数 称之为默认构造函数全部参数都指定了默认值的构造函数也属于默认构造函数一个类只能有一个默认构造函数定义了全部是默认参数的构造函数后 不能在定义重载构造函数如果定义了任何其他的构造函数 编译器就不会为你自动生成缺省的构造函数 16 3 2析构函数 一 析构函数的作用析构函数的作用是在系统撤销对象占用的内存之前 完成一些清理工作 格式 类名 函数体 17 3 2析构函数 二 析构函数的特点1 析构函数名是在类名前加 无返回类型 无参数 2 析构函数无参数 故不能被重载 3 当系统撤销对象之前将调用析构函数 P78注意 析构函数也可被用户当普通函数进行调用 但不影响系统在撤销对象时的自动调用 18 classStudent private char pName public Student pName newchar 20 Student delete pName 19 类和对象 类 数据成员 成员函数 20 小结构造函数构造函数的作用构造函数的特点无参和带参的构造函数用参数初始化表对数据成员初始化构造函数的重载带默认参数的构造函数析构函数析构函数的作用析构函数的特点 21 本章内容 3 1构造函数3 2析构函数3 3构造函数和析构函数的调用顺序3 4对象数组3 5对象指针3 6共用数据的保护3 7对象的动态建立和释放 22 3 4对象数组 对象数组指由同类的多个对象构成的集合 一 对象数组定义格式 类名对象数组名 常量表达式 类名对象数组名 常量表达式1 常量表达式2 23 3 4对象数组 对象数组 二 对象数组的初始化格式类名对象数组名 常量表达式 类名 实参列表1 类名 实参列表2 24 3 4对象数组 对象数组 三 数组元素的存取格式 对象数组名 下标 数据成员对象数组名 下标 成员函数 25 本章内容 3 1构造函数3 2析构函数3 3对象的赋值和复制3 4对象数组3 5对象指针3 6共用数据的保护3 7对象的动态建立和释放 26 3 5对象指针 3 5 1指向对象的指针3 5 2指向对象成员的指针3 5 3this指针 27 3 5对象指针 3 5 1指向对象的指针定义格式 类名 对象指针名访问格式 对象指针 数据成员对象指针 成员函数 实参列表 28 3 5对象指针 3 5 1指向对象的指针例如 Timet1 10 30 30 t1 ShowTime Time p p 29 3 5对象指针 3 5 2指向对象成员的指针 一 指向对象数据成员的指针定义格式 类型 指针变量名访问格式 指针变量名 对象 成员名 注意 所指向的数据成员必须为public 30 3 5对象指针 3 5 2指向对象成员的指针 一 指向对象数据成员的指针定义格式 类型 指针变量名访问格式 指针变量名 若h为public成员 31 3 5对象指针 3 5 2指向对象成员的指针 二 指向对象成员函数的指针1 指向普通函数的指针函数在编译时被分配到一个入口地址 称为函数的指针 函数名代表该函数的入口地址 32 3 5对象指针 3 5 2指向对象成员的指针 二 指向对象成员函数的指针1 指向普通函数的指针定义形式 返回类型 指针变量名 形参列表 赋值形式 指针变量名 函数名 33 3 5对象指针 3 5 2指向对象成员的指针 二 指向对象成员函数的指针1 指向普通函数的指针函数调用形式 函数名 实参 指针变量名 实参列表 举例 sum函数 34 3 5对象指针 3 5 2指向对象成员的指针 二 指向对象成员函数的指针2 指向对象成员函数的指针举例 时间类Time 35 includeusingnamespacestd classTime inth m s public Time inthh 0 intmm 0 intss 0 h hh m mm s ss voidShowTime cout h m s endl 36 3 5对象指针 3 5 2指向对象成员的指针 二 指向对象成员函数的指针2 指向对象成员函数的指针定义形式 返回类型 类名 指针变量名 形参列表 赋值形式 指针变量名 类名 成员函数名注意 所指向的成员函数必须为public 37 3 5对象指针 3 5 2指向对象成员的指针 二 指向对象成员函数的指针2 指向对象成员函数的指针函数调用形式 对象 成员函数名 实参 对象 指针变量名 实参列表 注意 定义时用类名 使用时用对象名 38 3 5对象指针 3 5 3this指针每一个成员函数都有一个隐含的特殊指针 this指针 This指针的值为当前调用的该成员函数的对象的首地址 例如 39 类和对象 成员函数 40 classTime inth m s public voidSetTime inth 0 intm 0 ints 0 this h h this m m this s s voidShowTime cout h m s endl 41 本章内容 3 1构造函数3 2析构函数3 3对象的赋值和复制3 4对象数组3 5对象指针3 6共用数据的保护3 7对象的动态建立和释放 42 3 6共用数据的保护 3 6 1常对象3 6 2常对象成员3 6 3指向对象的常指针3 6 4指向常对象的指针变量3 6 5对象的常引用 43 本章内容 3 1构造函数3 2析构函数3 3析构函数和构造函数的调用顺序3 4对象数组3 5对象指针3 6共用数据的保护3 7对象的动态建立和释放 44 3 7对象的动态建立与释放 3 7对象的动态建立与释放动态创建和撤销一个对象指针名 new类名 初值 delete指针名 注意1 使用new创建对象时自动调用构造函数 delete撤销对象之前自动调用析构函数 2 动态创建的对象必须使用delete进行撤销 45 3 7对象的动态建立与释放 3 7对象的动态建立与释放动态创建和撤销一维对象数组对象指针 new类名 数组大小 delete 对象指针 注意1 构造函数和析构函数的调用次数与数组的大小相同 2 此时只能调用默认构造函数 不能给参数3 注意构造函数和析构函数的调用顺序 46 本章内容 3 1构造函数3 2析构函数3 3析构函数和构造函数的调用顺序3 4对象数组3 5对象指针3 6共用数据的保护3 7对象的动态建立和释放 47 本章内容 3 8对象的赋值和复制3 9静态成员3 10友元3 11函数模板与类模板 48 3 8对象的赋值和复制 3 8 1对象的赋值格式对象名1 对象名2例如 Timet1 10 30 0 t2 t2 t1 作用将对象2的数据成员的值依次赋值给对象1 注意对象1和对象2必须是同类的已定义对象 49 3 8对象的赋值和复制 3 8 2对象的复制作用 利用已有对象复制出新的对象 格式 类名新对象 已有对象 或类名新对象 已有对象 建立新对象时自动调用复制构造函数 50 本章内容 3 8对象的赋值和复制3 9静态成员3 10友元3 11函数模板与类模板 51 3 9静态成员 问题引入在类的定义中 如何描述类的所有对象所共享的数据 例如对于之前定义的表示时间信息的类Time 如何统计Time类的对象的个数 52 3 9静态成员 解决方法方法一 定义全局变量或对象缺点 不安全 任何功能模块都可以更改 方法二 定义静态的数据成员优点 可实现共享 并保证安全性 静态成员静态数据成员静态成员函数 53 3 9静态成员 3 9 1静态数据成员与普通数据成员的区别普通数据成员是属于对象的 即在类的每一个对象中都拥有一个拷贝 静态数据成员是属于整个类的 即每个类只有一个拷贝 该类所有对象都共同拥有和使用 54 voidfun staticinti 0 i cout i endl voidmain for intk 0 k 3 k fun fun 只被赋值一次 程序退出时消失 55 3 9静态成员 3 9 1静态数据成员定义方式 一 在类内声明静态数据成员static类型名成员名 例如 classTime staticintcount 56 3 9静态成员 3 9 1静态数据成员定义方式 一 在类内声明静态数据成员static类型名成员名 注意 1 静态数据成员同样具有访问控制权限 2 静态数据成员具有静态生存期 即在程序开始时 系统为其分配存储空间 当程序结束时撤销 和对象的生死无关 57 3 9静态成员 3 9 1静态数据成员定义方式 二 在类外进行初始化类型类名 静态数据成员名 初始值注意 1 必须初始化 且必须在类外进行初始化 P1032 初始化时不加static 3 静态成员名前必须说明类属 58 3 9静态成员 3 9 1静态数据成员访问方式方法一类名 静态数据成员名方法二对象名 静态数据成员名注意 静态数据成员同样具有访问控制限制 因此 必须声明为public的 才能在类外访问 59 3 9静态成员 3 9 1静态数据成员应用举例定义静态数据成员count统计Time类当前对象的个数 60 练习 定义一个学生类 包括学号 姓名 语文成绩 要求 统计N个学生的平均成绩 并能输出学生总数以及平均成绩 61 练习 分析程序执行结果见Static txt 62 3 9静态成员 3 9 2静态成员函数特点只能存取类的静态数据成员定义格式在成员函数声明的前面加上关键字static调用形式类名 静态成员函数名 实参列表 对象 静态成员函数名 实参列表 63 3 9静态成员 3 9 2静态成员函数注意在静态成员函数中不能直接访问非静态成员 若要访问非静态成员 必须通过参数传递的方式得到相应的对象 再通过对象来访问 例 64 练习 编写程序实现宾馆住宿客人管理 客人类Guest客人编号Num 按先后顺序自动生成 姓名Name住宿房号Room房费fee客人总数Count提供构造函数 显示信息函数Display 以及返回客人总数函数GetCount等 创建3个客人对象进行测试 65 本章内容 3 8对象的赋值和复制3 9静态成员3 10友元3 11函数模板与类模板 66 3 10友元 员 友元的作用该类外部的函数或其他类通过声明为友元关系 从而可访问该类的私有成员 即B是A的友元 则B可访问A的私有成员 友元的分类友元函数 普通函数和类的成员函数 友元类 67 3 10友元 3 10 1友元函数 一 将普通函数声明为友元函数普通函数作友元的声明格式friend类型友元函数名 参数列表 注意1 该函数一般只在类中声明为友元 函数的定义在类外 2 友元的声明可在类中任何位置 68 3 10友元 3 10 1友元函数 二 将成员函数声明为友元函数应用举例定义表示学生类Student 定义教师类Teacher 在Teacher类中提供一个用于修改学生成绩的成员函数 69 3 10友元 3 10 1友元函数 二 将成员函数声明为友元函数成员函数作友元的声明格式friend类型类名 友元函数名 参数 提前引用声明class类名 70 Classteacher Voidsets Voidteacher sets cin st score Classstudent Private intnum floatscore Public student intn floats num n score s FriendVoidteacher sets Student st 71 3 10 1友元函数 二 将成员函数声明为友元函数注意 1 两个类声明的先后顺序 包含friend关键字的那个类后声明2 友元函数应先在类中声明 其定义应放在两个类的声明后面 72 3 10友元 3 10 2友元类作用类B是类A的友元类 则B中所有的成员函数都是A的友元函数 即所有B的成员函数都能访问A的私有数据成员 友元类的声明格式friend类名 例如此时那个类在前都可以 注意提前引用声明即可 73 3 10友元 3 10 2友元类说明 P111 友元关系是单向的 而不是双向的 友元关系不具有传递性 74 本章内容 3 8对象的赋值和复制3 9静态成员3 10友元3 11模板 75 3 11 1模板的概念 一 什么是模板 一种通用的函数和类的设计方法 即将函数或类处理的数据类型进行参数化 在使用时再对数据类型进行实例化 二 作用实现代码重用 提高程序开发效率 三 模板的分类函数模板类模板 76 3 11 2函数模板 一 函数模板的声明template 参数表 函数体定义 注意 T1 T2是参数化类型 class也可写为typename 77 3 11 3类模板 一 问题引入举例1 定义对两个整数进行比较的类Compare int 2 定义对两个实数进行比较的类Compare double 78 3 11 3类模板 一 问题引入 classCompare int intx y public Compare inta intb x a y b intmax returnx y x y intmin returnx y x y 79 3 11 3类模板 一 问题引入 classCompare double doublex y public Compare doublea doubleb x a y b doublemax returnx y x y doublemin returnx y x y 80 3 11 3类模板 一 问题引入 templateclassCompare Tx y public Compare Ta Tb x a y b Tmax returnx y x y Tmin returnx y x y 81 3 11 3类模板 二 类模板的定义1 定义格式templateclass类模板名 类成员定义 其中 class也可写为typename 82 3 11 3类模板 二 类模板的定义2 成员函数在类体外的定义格式t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年通辽辅警招聘考试真题及答案详解(易错题)
- 2023年贵阳辅警协警招聘考试备考题库附答案详解(典型题)
- 2024年云浮辅警招聘考试真题完整参考答案详解
- 2023年贺州辅警协警招聘考试真题(含答案详解)
- 2024年嘉义县辅警协警招聘考试备考题库及答案详解(考点梳理)
- 2023年赣州辅警招聘考试题库及1套完整答案详解
- 2023年邵阳辅警招聘考试真题及答案详解(网校专用)
- 2024年丰都县辅警招聘考试真题及答案详解(基础+提升)
- 2023年陕西辅警协警招聘考试备考题库附答案详解(基础题)
- 2024年保山辅警协警招聘考试真题附答案详解(综合题)
- 2025水利五大员(材料员)考试试题及答案
- 2025年医院麻醉药品、第一类精神药品处方权及调剂资格考试试题及答案
- 2025年保安员证考试题库含完整答案
- 一点点奶茶店营销策划方案
- 2025年天津市辅警公共基础知识题库(附答案)
- 智慧冷链一体化解决方案
- 铝锭居间合同协议
- 【MOOC】《研究生英语科技论文写作》(北京科技大学)中国大学MOOC慕课答案
- 中国铝业股份有限公司巩义市粘土矿矿产资源开采与生态修复方案
- HGT 5174-2017 车辆排气管用耐高温涂料
- 实践论矛盾论导读
评论
0/150
提交评论