




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C 中的类和对象 2 4 21 2020 FAQ1 如何理解类和对象 在面向对象程序设计中 类表示对现实世界中一类具有共同特征的事物的抽象 类的定义是由两部分组成的 分别是声明部分和实现部分 声明部分用来声明该类的成员 包括数据成员及成员函数 数据成员即是属性 成员函数即是方法 实现部分是成员函数的具体实现 3 4 21 2020 class类名 public 公有数据成员或成员函数声明 private 私有数据成员或成员函数声明 protected 受保护数据成员或成员函数声明 4 4 21 2020 include iostream h classStu private charname 20 intage charsex 10 public voidstuinfo cout name name endl cout age age endl cout sex sex endl 5 4 21 2020 include iostream h classStu private charname 20 intage charsex 10 public voidstuinfo voidStu stuinfo cout name name endl cout age age endl cout sex sex endl 6 4 21 2020 对象的定义方式 先定义类再定义对象定义类的同时定义对象 include iostream h classStu private charname 20 intage charsex 10 public voidstuinfo Stus1 s2 对象 include iostream h classStu private charname 20 intage charsex 10 public voidstuinfo s1 s2 7 4 21 2020 FAQ2 如何理解对象的初始化 构造函数用来对类对象进行初始化 它完成对内存空间的申请 赋初值等工作 析构函数主要是用来做清理工作的 8 4 21 2020 classStu private charname 20 intage charsex 10 public Stu charc1 20 charc2 10 intn 构造函数voidstuinfo 9 4 21 2020 classStu private charname 20 intage charsex 10 public Stu charc1 20 charc2 10 intn 构造函数voidstuinfo Stu 析构函数 include includeclassStu private charname 20 intage charsex 10 public Stu charc1 20 charc2 10 intn 构造函数voidstuinfo Stu 析构函数 Stu Stu charc1 20 charc2 10 intn 构造函数定义 cout constructorcalled endl strcpy name c1 strcpy sex c2 age n Stu Stu 析构函数定义 cout disconstructorcalled endl voidStu stuinfo cout name name endl cout age age endl cout sex sex endl voidmain Stus1 Mary w 23 s2 Jack m 25 s1 stuinfo s2 stuinfo 12 4 21 2020 FAQ3 如何理解对象的生存周期 对象的生存周期是从对象创建到释放的一段时间 对象可以按生存周期的不同分为4种 即局部对象 全局对象 静态对象和动态对象 局部对象的生存周期较短 静态对象的生存周期较长 全局对象的生存周期最长 而动态对象的生存周期取决于new运算符和delete运算符的之间的间隔 include includeclassTest char mp public Test char lp 类Test的构造函数 mp NULL cout Test Test endl intlen strlen lp 1 获得lp指向内容的长度mp newchar len 动态分配len大小的内存空间memset mp 0 len 内存设置strncpy mp lp len 将len长的lp内容赋给mp Test cout Test Test endl if NULL mp delete mp 如果mp的内容不为NULL 释放 operatorchar 重载char 类型 returnmp 返回mp intmain Testt Test char p t cout callfunbefore endl cout len strlen p endl cout end endl return0 15 4 21 2020 FAQ4 如何向函数传递对象 值传递地址传递 includeclassTest public Test inta 构造函数 num a voidsetnum inta num a intgetnum returnnum private intnum voidadd Testt 类对象作为函数参数 t setnum t getnum t getnum cout nnumvalueadd cout t getnum endl intmain Testtt 100 调用构造函数add tt 调用函数add 参数按值传递cout objectttchangedismain cout tt getnum endl return0 includeclassTest public Test inta 构造函数 num a voidsetnum inta num a intgetnum returnnum private intnum voidadd Test t 类对象作为函数参数 t setnum t getnum t getnum coutgetnum endl intmain Testtt 100 调用构造函数add includeclassTest public Test inta 构造函数 num a voidsetnum inta num a intgetnum returnnum private intnum voidadd Test 19 4 21 2020 FAQ5 编写C 类时需要注意哪些问题 使用关键字class来定义C 类时 class必须是小写 其后面紧跟着类的名称 类以左大括号开始 右大括号结束 大括号中的内容都属于该类的成员 一般情况下 在类体内先说明公有成员 然后说明私有成员 在说明成员时 一般按照成员的类型由小到大的顺序说明 类中的数据成员的类型可以是任意的 包含整型 浮点型 字符型 数组 指针和引用等 也可以是另一个类的对象 自身类的指针或引用 但是自身类的对象是不可以的 在类体中不允许对所定义的数据成员进行初始化 可以将类定义的说明部分或者整个定义部分 包含实现部分 放到一个头文件中 20 4 21 2020 声明类的静态变量时必须在类内部和类外部的全局内存区中两次声明 但访问的方式与类中的普通成员相同 静态变量和函数可以在声明实例之前就被访问 默认的情况下 类中的成员都被认为是私有的 并且只能被类中的其他成员函数访问 通常情况下如果没有自定义构造函数 系统会自动定义默认且仅有的构造函数和析构函数 而且当使用自定义构造函数时 要求构造函数必须声明为公有 在C 中 存在3种类型的类 分别为类 结构和联合 三者使用不同的关键字来声明 分别为class struct和union 在类的成员函数中调用非成员函数 在非成员函数前必须加上 21 4 21 2020 22 4 21 2020 FAQ6 如何理解构造函数 构造函数的主要功能是给对象分配空间 因为对象在定义时都会默认调用构造函数 以此进行内存空间的分配以及变量的初始化操作 includeclassTime public Time 构造函数Time hour 0 minute 0 sec 0 voidset Time voidshow Time private inthour intminute intsec intmain Timet1 t1 set Time t1 show Time Timet2 t2 show Time return0 voidTime set Time cin hour cin minute cin sec voidTime show Time cout hour minute sec endl 24 4 21 2020 如果自己没有定义构造函数 系统会自动创建默认的无参数 空构造函数 如果自定义了一个构造函数 系统则不会自动创建默认构造函数 并且当声明类的实例时 需要使用自定义的构造函数 构造函数必须是公有的 构造函数的名称必须与类名相同 构造函数没有返回值 构造函数是成员函数 函数体可写在类体内 也可定义在类体外 构造函数是一个特殊的函数 该函数的名称与类名相同 不指定类型说明 有隐含的返回值 该值由系统内部使用 程序中不能直接调用构造函数 在创建对象时系统自动调用构造函数 构造函数可以无参数 可以有一个参数 也可以有多个参数 构造函数可以重载 即可以定义多个参数个数不同的构造函数 25 4 21 2020 FAQ7 默认构造函数是什么 它有什么特点 如果程序中没有提供任何构造函数 则C 提供一个默认的构造函数 该默认构造函数是无参构造函数 它仅负责创建对象 不做任何初始化的工作 默认构造函数的特点如下 在创建对象时编译器自动创建并调用 无参数 函数体为空 仅当没有自定义构造函数时编译器才会自动创建 include includeclassStu public Stu val 6 Stu intval val 6 intval voidmain Stus coutvec 5 cout vec 3 val endl Stu ptr newStudent 4 cout ptr 1 val Stuss Student cout ss val 27 4 21 2020 FAQ8 何时调用拷贝构造函数 拷贝构造函数是由编译器调用 用来完成一系列基于同一类的其他对象的构件及初始化 拷贝构造函数的一般形式如下 类名 类名 28 4 21 2020 对象以值传递的方式传入函数体 即函数的返回值是对象 调用函数进行形参和实参结合时 例如 classTest copyfun Testp 函数的形参是类的对象 intmain Testt copyfun t 当调用函数 函数的实参传给形参 调用拷贝构造函数 省略 29 4 21 2020 对象以值传递的方式从函数返回 即函数的返回值是对象 函数返回值时 例如 classTest Testcopyfun 函数的返回值是类的对象 Testt 100 returnt 函数返回的是对象intmain Testt1 t1 copyfun 返回函数值时 调用拷贝构造函数 省略 30 4 21 2020 对象需要通过其他对象进行初始化 即当使用类的一个对象去初始化该类的另一个对象时 例如 classTest intmain Testt1 Testt2 t1 使用t1初始化t2 省略 include include 自定义类PersonclassPerson public 公有声明部分Person char pn 构造函数声明Person Person 将pn的值赋给pname 拷贝构造函数实现部分Person Person Person 用拷贝构造函数定义Person对象p2 其字符串与p1相同 33 4 21 2020 FAQ9 深拷贝与浅拷贝的区别是什么 浅拷贝就是对默认拷贝构造函数所实现的数据成员逐一赋值 如果类中包含指针类型数据 将会产生错误 为了解决该问题 需要显式定义拷贝构造函数 使其不但可以复制数据成员 而且可以为对象分配内存空间 这就是深拷贝 classA Aa1 Aa2 a1 调用拷贝赋值函数Aa3 a1 调用拷贝构造函数 classA public 省略intcint char cp 指针变量cp A A constA 省略 35 4 21 2020 深拷贝和浅拷贝的区别 当拷贝对象状态中包含其他对象的引用时 如果需要复制的是引用对象指向的内容 而不是引用 内存地址 则是深拷贝 否则是浅拷贝 浅拷贝就是成员数据之间的赋值 当值拷贝时 两个对象就有共同的资源 而深拷贝是先将资源复制一份 使对象拥有不同的资源 但资源内容是相同的 深拷贝在处理引用时 如果改变新对象内容将不会影响到原对象内容 浅拷贝资源后释放资源时可能会产生资源归属不清楚的情况 从而导致程序运行出错 36 4 21 2020 FAQ10 如何理解析构函数 析构函数 其作用与构造函数刚好相反 是用来清理内存中无用的资源 只有当一个对象的生命周期结束时才调用析构函数 37 4 21 2020 没有使用析构函数的程序的代码如下 classBaud public Baud longspeed private intm aSpeed char m pszSpeed Baud Baud intspeed m aSpeed newchar 10 if m pSpe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 考点解析人教版九年级《电与磁》章节训练试卷(含答案详解版)
- 护理老人考试题目及答案
- 考点解析人教版八年级上册物理声现象《声音的特性》达标测试练习题(含答案解析)
- 2025荆州中学教师考试真题及答案
- 难点解析人教版八年级上册物理光现象《平面镜成像》定向测试练习题(含答案解析)
- 2025检察官遴选考试真题及答案
- 难点解析人教版八年级上册物理《声现象》专项攻克练习题(含答案详解)
- 望奎四中初三考试卷子及答案
- 安全生产与突发事件应对法律法规知识试卷含答案
- 七匹狼质量体系数字化升级-洞察与解读
- 2025年春季形势与政策-从教育大国迈向教育强国
- 有限空间告知牌的模板
- 第四章-运动系统
- 《边防检查法律法规》课件
- 住宅小区分布式光伏安装方案
- 2023中华护理学会团体标准-注射相关感染预防与控制
- 上海市经济信息中心(上海市公共信用信息服务中心)招聘真题
- 幼儿园6S管理培训课件
- 中国电信通信技术类笔试题
- 店长分成合作协议书
- 《健康管理职业导论》高职健康管理专业全套教学课件
评论
0/150
提交评论