面向对象程序设计.ppt_第1页
面向对象程序设计.ppt_第2页
面向对象程序设计.ppt_第3页
面向对象程序设计.ppt_第4页
面向对象程序设计.ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象程序设计 2020 2 25 2 第十章结构 10 1结构 10 2结构与指针 10 3结构与数组 10 4传递结构参数 10 5结构函数 10 6链表结构 10 7联合 Union 小结 2020 2 25 3 前面已介绍了整型 实型 字符型等基本数据结构 介绍了处理相同数据类型数据集合的数组 对于处理具有某种联系 可以由不同类型的数据项组成的复杂数据类型 C 称为结构 本章内容包括结构类型及变量的定义 访问结构的成员方法 结构作为参数传递的函数调用及返回结构的函数等 2020 2 25 4 10 1结构 一 结构及结构变量的定义结构是用户自定义的新数据类型 声明结构类型时 首先指定关键字struct和结构名 然后用一对花括号将若干个结构成员数据类型说明括起来 例如 要表示一个单位职工的收入情况 需要记录每个职工的姓名 年龄 工资等信息 当用结构类型表示时 结构中应包括一个字符串分量 表示姓名 一个整型分量 表示年龄 一个浮点型分量 表示工资 按C 规定 可做如下定义 structperson charname 10 intage floatwage 2020 2 25 5 其中 struct是关键字 person是自定义的结构类型的名称 花括号中是结构成员的说明 person结构类型被定义后 从使用角度看 就等效于int char float等基本数据类型 类型定义通常位于main 函数之前 使该类型在定义点后面的程序中可见 要使用结构变量也必须先定义后使用 例如 personworker 声明一个结构并不分配内存 内存分配发生在定义这个新数据类型的变量中 变量一旦定义 编译器将为woker变量分配包含三种不同数据类型成员的存储空间 2020 2 25 6 二 结构成员的访问一旦通过定义相应结构变量 分配了空间 就可以使用点操作符 或称结构成员操作符 来访问结构中的成员 左操作数为结构类型变量 右操作数为结构中的成员 一般形式 结构变量名 结构成员名例如 worker age 25 cin worker age cin worker wage 下面是一个定义结构类型和变量的简单例子 2020 2 25 7 includestructweather floattemp intwind voidmain weathertoday today temp 25 5 today wind 4 cout Temp today temp endl cout Wind today wind endl 结果 Temp 25 5Wind 4 2020 2 25 8 三 结构变量赋值数组不能彼此赋值 但同类型的结构变量可以彼此赋值 例如下面程序对结构变量赋值 includestructperson charname 20 longid floatsalary personpr1 Liming 1082422 5300 0 2020 2 25 9 voidmain personpr2 pr2 pr1 assigningpr1topr2cout pr2 name pr2 id pr2 salary endl 结果 Liming10824225300 0不同类型的结构变量不允许相互赋值 即使两者包含有相同的成员 注意 在C中结构类型名必须包含关键字struct 故定义语句为 structpersonworker manager 2020 2 25 10 10 2结构与指针 结构变量的成员可以通过点操作符进行访问 也可以通过指针进行访问 若定义一个结构指针 并把一个结构变量的地址赋给它 则通过该指针可对结构变量的成员进行访问 结构指针定义格式如下 person p 定义指向结构类型的指针personpr1 定义结构类型变量若p p salary等效于p salary 2020 2 25 11 在使用指针访问成员时 通常使用箭头操作符 例如 下面程序中 定义了结构指针 通过结构指针访问结构成员 include includestrutperson charname 20 longid floatsalary 2020 2 25 12 voidmain personpr1 person p p 结果为 Wangming123456784800 0 2020 2 25 13 10 3结构与数组 如果一个数组的元素是同一种结构类型的变量 那么这种数组称为结构数组 要定义一个结构数组 必须先定义一个结构类型 然后再定义具有这种结构类型的一个数组 例如 定义一个包含100个元素的person结构数组 structperson charname 20 longid floatsalary personallone 100 2020 2 25 14 数组中每个元素是一个完整的结构变量 它包含name id salary三个成员分量 allone 0 访问第一个数组元素 allone 99 访问最后一个数组元素 例如 下面程序对一个person结构数组中的元素进行 冒泡法 排序 工资高的排在后面 includestructperson charname 20 longid floatsalary 2020 2 25 15 personallone 6 jone 12345 3390 0 david 13916 4490 5 marit 27519 3110 0 jasen 42876 6230 5 peter 23987 4000 2 yoke 12335 5110 0 voidmain persontemp for inti 1 i 6 i 排序轮次数 for intj 0 j 5 i j 一轮中比较 2020 2 25 16 if allone j salary allone j 1 salary 工资高的后移 temp allone j allone j allone j 1 alone j 1 temp for intk 0 k 6 k cout allone k name allone k id allone k salary endl 2020 2 25 17 运行结果为 marit275193110 0jone123453390 0peter239874000 2david139164490 5yoke123355110 0jasen428766230 5 2020 2 25 18 10 4传递结构参数 结构变量也可以作为实参数进行函数调用 可以采用传值 传址 传引用的三种方式传递参数 一 传递结构变量值因为传递的是实参结构变量中拷贝的数值 所以实参结构变量的数值不会因为函数的调用而被修改 例如 下面是一个传值调用的例子 includestructperson charname 20 longid floatsaslary 2020 2 25 19 voidprint personpr cout pr name pr id pr salary endl personallone 4 jone 12345 3390 0 david 13916 4490 5 marit 27519 3110 0 yoke 12335 5110 0 voidmain for inti 0 i 4 i print allone i 实参数为结构数组元素 2020 2 25 20 结果为 jone123453390 0david139164490 5marit275193110 0yoke123355110 0 2020 2 25 21 二 传递结构变量的引用结构变量也可以按引用方式传递 此时仅把实参的地址传给形参 由于传递的是地址 可以实现由形参直接修改实参的作用 引用传递没有传递值的拷贝数据过程 节省了传送时间和所需的存储空间 传递效率提高 例如 将前面的程序改为用引用传递结构变量 只需在print 函数定义时 将形参说明为引用 其函数调用方式与传递方式相同 voidprint person 2020 2 25 22 三 传递结构变量的地址传递结构变量地址与传递引用的功能类似 都能实现双向传递 若将前面程序改为传递结构变量的地址 只需定义print 函数时 将形参说明为指向结构变量的指针 函数调用时传递实参结构变量的地址 voidprint person pr coutnameidsalary endl print 2020 2 25 23 10 5结构函数 返回值为结构类型的函数称为结构函数 一 返回结构变量一个函数可以返回一个结构变量 在main 中 调用结构函数的返回值必须赋于具有相同结构类型的变量 例如 includestructperson charname 20 longid floatsalary 2020 2 25 24 persongetperson 定义返回结构变量的函数 persontemp cout temp name cout temp id temp salary returntemp 返回结构变量temp voidprint person 2020 2 25 25 voidmain personemployee 3 for inti 0 i 3 i employee i getperson 返回值赋给同类型的结构变量print employee i 2020 2 25 26 结果 Pleaseenteranameforoneperson maritPleaseenterone sIDnumberandhissalary 275193110 0marit275193110 0 如果将上例中的getperson 函数改为引用传递 则可提高程序运行效率 省去函数返回值赋以同类型结构变量的操作 改写后的程序为 2020 2 25 27 includestructperson charname 20 longid floatsalary voidgetperson person 2020 2 25 28 voidprint person 2020 2 25 29 二 返回结构的引用一个函数可以返回一个结构引用 也可以返回一个结构指针 但是 不要返回一个局部结构变量的引用或指针 2020 2 25 30 10 6链表结构 一 结构的嵌套结构可以嵌套 即结构中可以是另一个结构类型的成员变量 例如 structpersonstructdate charname 10 intmonth intage intday floatwage intyear datapayday worker 也可以表示为 2020 2 25 31 structperson charname 10 intwage structdate intmonth intday intyear payday worker 结构变量payday是嵌套在结构person内的一个成员分量 在访问嵌套结构的成员时 可以使用多个点操作符 从最外层到最内层逐个列出成员名 worker wage 5000 0 worker payday month 11 2020 2 25 32 二 链表结构结构成员变量不能包含有自身的结构变量 但可以是指向该结构变量的指针通过包含一个指向自身结构的指针 可以实现不连续分布的结构变量的遍历如下面的结构 structlist charname 20 list pn 其中 name成员含有实际的信息 pn是指向另一个list结构变量的指针 2020 2 25 33 显然 通过结构变量中的指针成员链接 能构成任意长度的结构链 这样的结构链称为链表 链表中的每个list结构变量称为一个结点 2020 2 25 34 链表是由一个个有序的结点组成的 每个结点是同类型的结构变量 通过程序可以建立和显示链表 可以插入 删除及增加结点来维护链表 链表总是包含有链首指针 链表的操作一般都先由链首指针引导 三 链表的创建与遍历例如 下面程序建立一个链表 并输出该链表 includestructstudent longnumber floatscore student next 2020 2 25 35 student head 链首指针student greate 创建链表函数 student ps 创建新结点指针student pend 移动的链尾指针 用于在其后插入结点ps newstudent 动态申请新建结点的存储空间cin ps number ps score 结点赋值head NULL 开始时链表为空pend ps while ps number 0 if head NULL head ps 2020 2 25 36 elsepend next ps pend ps S点ps newstudent cin ps number ps score pend next NULL deleteps return head voidshowlist student head cout Theitemsoflistare n 2020 2 25 37 while head coutnumberscorenext voidmain showlist greate 2020 2 25 38 输入 结果 40185 0Theitemsoflistare 41073 0401 85 042591 0410 73 041368 0425 91 043282 0413 68 000432 82 0在main 中 把建立链表函数greate 的返回值head 指向链表指针 作为实参数调用showlist 函数 2020 2 25 39 greate 函数中 链表创建过程如下图所示 进入循环之前 headNULL第一次进入循环到达S点 pendpshead第一次循环结束后 headpendps 2020 2 25 40 第二次循环到达S点时 headpendps第二次循环结束时 headpendps 程序结束时 head NULL 2020 2 25 41 10 7联合 Union 联合是一种与结构相类似的构造类型 联合与结构的主要区别在于 联合类型分量所占内存空间不是各个成员所需存储空间字节数的总和 而是联合成员中所需要存储空间最大的成员所需要的字节数 编译器规定联合各个成员共享一个公共存储空间 在任何给定的时刻 只能允许一个成员驻留在联合中 而对结构而言 则是所有的成员都一直驻留在结构中 定义联合类型的一般形式是 union联合名 类型变量名 类型变量名 联合变量名 2020 2 25 42 例如定义一个名为data的联合类型和名为data的结构类型 uniondatestructdata charch ch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论