2019年面向对象程序设计精品教育.ppt
《2019年面向对象程序设计精品教育.ppt》由会员分享,可在线阅读,更多相关《2019年面向对象程序设计精品教育.ppt(45页珍藏版)》请在三一文库上搜索。
1、面向对象程序设计,2019/6/13,2,第十章 结构,10.1 结构 10.2 结构与指针 10.3 结构与数组 10.4 传递结构参数 10.5 结构函数 10.6 链表结构 10.7 联合(Union) 小结,2019/6/13,3,前面已介绍了整型、实型、字符型等基本数据结构。 介绍了处理相同数据类型数据集合的数组。 对于处理具有某种联系,可以由不同类型的数据项组成的复杂数据类型,C+称为结构。 本章内容包括结构类型及变量的定义,访问结构的成员方法,结构作为参数传递的函数调用及返回结构的函数等。,2019/6/13,4,10.1 结构,一、结构及结构变量的定义 结构是用户自定义的新数据
2、类型。声明结构类型时,首先指定关键字struct和结构名,然后用一对花括号将若干个结构成员数据类型说明括起来。 例如,要表示一个单位职工的收入情况,需要记录每个职工的姓名、年龄、工资等信息。当用结构类型表示时,结构中应包括一个字符串分量(表示姓名),一个整型分量(表示年龄),一个浮点型分量(表示工资)。按C+规定,可做如下定义: struct person char name10; int age; float wage; ;,2019/6/13,5,其中,struct 是关键字;person 是自定义的结构类型的名称;花括号中是结构成员的说明。 person 结构类型被定义后,从使用角度看,
3、就等效于int,char,float等基本数据类型。 类型定义通常位于main( )函数之前,使该类型在定义点后面的程序中可见。 要使用结构变量也必须先定义后使用,例如: person worker; 声明一个结构并不分配内存,内存分配发生在定义这个新数据类型的变量中。 变量一旦定义,编译器将为woker 变量分配包含三种不同数据类型成员的存储空间,2019/6/13,6,二、结构成员的访问 一旦通过定义相应结构变量,分配了空间,就可以使用点操作符“.”(或称结构成员操作符)来访问结构中的成员。左操作数为结构类型变量,右操作数为结构中的成员。 一般形式:结构变量名. 结构成员名 例如: wor
4、ker.age=25; cinworker.age; cinworker.wage; 下面是一个定义结构类型和变量的简单例子:,2019/6/13,7,#include struct weather float temp; int wind; ; void main( ) weather today; today.temp=25.5; today.wind=4; cout“Temp=”today.tempendl; cout“Wind=”today.windendl; ,结果: Temp=25.5 Wind=4,2019/6/13,8,三、结构变量赋值 数组不能彼此赋值,但同类型的结构变量可以
5、彼此赋值。 例如下面程序对结构变量赋值: #include struct person char name20; long id; float salary; ; person pr1“Li ming”, 1082422, 5300.0;,2019/6/13,9,void main( ) person pr2; pr2=pr1; /assigning pr1 to pr2 coutpr2.name“ ”pr2.id“ ”pr2.salaryendl; 结果: Li ming 1082422 5300.0 不同类型的结构变量不允许相互赋值,即使两者包含有相同的成员。 注意:在C 中结构类型名必须
6、包含关键字struct,故定义语句为:struct person worker,manager;,2019/6/13,10,10.2 结构与指针,结构变量的成员可以通过点操作符进行访问,也可以通过指针进行访问。 若定义一个结构指针,并把一个结构变量的地址赋给它,则通过该指针可对结构变量的成员进行访问。 结构指针定义格式如下: person *p; /定义指向结构类型的指针 person pr1; /定义结构类型变量 若p= (*p).salary 等效于p-salary.,2019/6/13,11,在使用指针访问成员时,通常使用箭头操作符“-”。 例如:下面程序中,定义了结构指针,通过结构指针
7、访问结构成员。 #include #include strut person char name20; long id; float salary; ;,2019/6/13,12,void main( ) person pr1; person *p; p= 结果为: Wang ming 12345678 4800.0,2019/6/13,13,10.3 结构与数组,如果一个数组的元素是同一种结构类型的变量,那么这种数组称为结构数组。 要定义一个结构数组,必须先定义一个结构类型,然后再定义具有这种结构类型的一个数组。 例如,定义一个包含100个元素的person 结构数组: struct per
8、son char name20; long id; float salary; ; person allone100;,2019/6/13,14,数组中每个元素是一个完整的结构变量,它包含name、id、salary三个成员分量。 allone0 访问第一个数组元素; allone99访问最后一个数组元素。 例如:下面程序对一个person 结构数组中的元素进行“冒泡法”排序,工资高的排在后面。 #include struct person char name20; long id; float salary; ;,2019/6/13,15,person allone6=“jone”,1234
9、5,3390.0, “david”,13916,4490.5, “marit”,27519,3110.0, “jasen”,42876,6230.5, “peter”,23987,4000.2, “yoke”,12335,5110.0; void main( ) person temp; for(int i=1; i6;i+) /排序轮次数 for(int j=0;j=5-i;j+) /一轮中比较,2019/6/13,16,if(allonej.salaryallonej+1.salary) /工资高的后移 temp=allonej; allonej=allonej+1; alonej+1=t
10、emp; for(int k=0;k6;k+) coutallonek.name“ ” allonek.id“ ” allonek.salaryendl; ,2019/6/13,17,运行结果为: marit 27519 3110.0 jone 12345 3390.0 peter 23987 4000.2 david 13916 4490.5 yoke 12335 5110.0 jasen 42876 6230.5,2019/6/13,18,10.4 传递结构参数,结构变量也可以作为实参数进行函数调用。可以采用传值、传址、传引用的三种方式传递参数。 一、传递结构变量值 因为传递的是实参结构变
11、量中拷贝的数值,所以实参结构变量的数值不会因为函数的调用而被修改。 例如:下面是一个传值调用的例子 #include struct person char name20; long id; float saslary; ;,2019/6/13,19,void print(person pr) coutpr.name“ ”pr.id“ ”pr.salaryendl; person allone4=“jone”,12345,3390.0, “david”,13916,4490.5, “marit”,27519,3110.0, “yoke”,12335,5110.0; void main( ) fo
12、r(int i=0;i4;i+) print(allonei); /实参数为结构数组元素 ,2019/6/13,20,结果为: jone 12345 3390.0 david 13916 4490.5 marit 27519 3110.0 yoke 12335 5110.0,2019/6/13,21,二、传递结构变量的引用 结构变量也可以按引用方式传递,此时仅把实参的地址传给形参。由于传递的是地址,可以实现由形参直接修改实参的作用。 引用传递没有传递值的拷贝数据过程,节省了传送时间和所需的存储空间,传递效率提高。 例如,将前面的程序改为用引用传递结构变量,只需在print( )函数定义时,将形
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2019 面向 对象 程序设计 精品 教育
链接地址:https://www.31doc.com/p-2954624.html