版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 本章主要内容本章主要内容7.1 结构体和共同体结构体和共同体 7.2 枚举类型枚举类型 7.3 typedef声明声明 高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 7.1 结构体和共同体结构体和共同体 经常需要将多个相关的、不同类型的数据包装成经常需要将多个相关的、不同类型的数据包装成为一个整体来使用:为一个整体来使用:u描述一本书的相关信息,其中包括书的书号、书名、出描述一本书的相关信息,其中包括书的书号、书名、出版社和定价等。版社和定价等。结构体类型定义结构体类型定义struct 结构体类型名结构体类型名 成员
2、类型成员类型1 成员名成员名1; 成员类型成员类型2 成员名成员名2; 成员类型成员类型n 成员名成员名n; ; struct是结构体类型关键字是结构体类型关键字符合标识符命名规则符合标识符命名规则 结构体类型的定义应视为一个完整的语句,因此,结构体类型的定义应视为一个完整的语句,因此,在定义结束后需在结尾添加在定义结束后需在结尾添加“;” 高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 struct date /定义出版日期结构体类型定义出版日期结构体类型 short year; short month; short day;struct Book /定义书籍信息结构体类型定义
3、书籍信息结构体类型 int num;/书号书号 char name40;/书名书名 char publisher20;/出版社出版社 float price;/定价定价 struct date pub_date;/出版日期,出版日期,pub_date成员的数据类型是结构体类型成员的数据类型是结构体类型;高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 结构体变量结构体变量结构体类型和基本数据类型(结构体类型和基本数据类型(int、float和和char)一样,可以定义变量和函数。)一样,可以定义变量和函数。u Book com_book; u Book book(); 结构体类型是
4、一种自定义的数据类型,类结构体类型是一种自定义的数据类型,类型定义过程中型定义过程中并不给出该类型的具体数据并不给出该类型的具体数据,因此;因此;在定义结构体类型时,系统在定义结构体类型时,系统不会为其分配不会为其分配内存空间内存空间。 高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 结构体变量定义的三种形式直接定义法直接定义法 u直接定义法是指在定义结构体类型的同时定义变量。其直接定义法是指在定义结构体类型的同时定义变量。其一般形式为:一般形式为:struct 结构体类型名结构体类型名 成员类型成员类型1 成员名成员名1; 成员类型成员类型2 成员名成员名2; 成员类型成员类型
5、n 成员名成员名n;变量名变量名1,变量名变量名2,变量名变量名n;u如:如:struct Cat char colour10; int weight; float length;cat1,cat2;高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 间接定义法间接定义法 u间接定义法是指不在定义结构体类型的同时定义间接定义法是指不在定义结构体类型的同时定义变量,而是在使用变量之前用类型名来定义。其变量,而是在使用变量之前用类型名来定义。其一般形式为:一般形式为:struct 结构体类型名结构体类型名 成员类型成员类型1 成员名成员名1; 成员类型成员类型2 成员名成员名2; 成员类
6、型成员类型n 成员名成员名n;struct 结构体类型名结构体类型名 变量名变量名1,变量名变量名2,变量名变量名n;u如:如:Cat cat1,cat2;高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 无结构体类型名定义法无结构体类型名定义法 u无结构体类型名定义法是指省略结构体类型名来无结构体类型名定义法是指省略结构体类型名来定义变量的方法。其一般形式为:定义变量的方法。其一般形式为:struct 成员类型成员类型1 成员名成员名1; 成员类型成员类型2 成员名成员名2; 成员类型成员类型n 成员名成员名n;变量名变量名1,变量名变量名2,变量名变量名n;高级程序设计高级程序
7、设计C+ E-Mail:c_田秀霞田秀霞 结构体变量的初始化结构体变量的初始化 直接定义并初始化直接定义并初始化struct 结构体类型名结构体类型名 成员类型成员类型1 成员名成员名1; 成员类型成员类型2 成员名成员名2; 成员类型成员类型n 成员名成员名n;变量名变量名1=初值初值,变量名变量名2=初值初值,变量名变量名n=初值初值; 如:如:struct Cat char colour10; int weight; float length;cat1=white,525,60.4,cat2=yellow,237,28.9;高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 间
8、接定义并初始化间接定义并初始化 ustruct 结构体类型名结构体类型名 结构体变量名结构体变量名=初值初值;u如:如: Cat cat1=white,525,60.4;高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 结构体变量的使用结构体变量的使用 结构体成员的引用结构体成员的引用 u结构体变量名成员名结构体变量名成员名u“”是成员运算符是成员运算符,它是所有运算符中优先级,它是所有运算符中优先级最高的最高的u如:如: cat1.weight=525;若成员本身也是一个结构体,则需要用若干若成员本身也是一个结构体,则需要用若干个成员运算符,个成员运算符,一级一级地找到最低级成员
9、。一级一级地找到最低级成员。uBook book;ubook.pub_date.year=2010;ubook.pub_date.month=11;ubook.pub_date.day=11; 高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 结构体变量的操作结构体变量的操作 不能将结构体变量作为一个整体进行输入输出操作不能将结构体变量作为一个整体进行输入输出操作,只能对只能对结构体变量中的结构体变量中的成员成员进行输入输出。进行输入输出。合法的访问方式:合法的访问方式:ucoutcat1.weight;ucoutbook.pub_date.year;不合法的访问方式:不合法的访问
10、方式:ucoutcat1;ucoutbook; 成员变量可以进行各种运算成员变量可以进行各种运算 usum_weight=cat1.weight+cat2.weight; ucat1.length-; 高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 结构体数组的定义、初始化及使用结构体数组的定义、初始化及使用 用于存放结构体类型数据的数组叫做用于存放结构体类型数据的数组叫做结构体数组结构体数组。u结构体数组是数组的一种,其使用方法与普通数组一样。结构体数组是数组的一种,其使用方法与普通数组一样。结构体数组的定义及初始化结构体数组的定义及初始化 u直接定义并初始化直接定义并初始化
11、struct Cat char colour10; int weight; float length;cat_arr2=white,525,60.4,yellow,237,28.9; 高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 u间接定义并初始化间接定义并初始化struct Cat char colour10; int weight; float length;Cat cat_arr2=white,525,60.4,yellow,237,28.9;不合法的赋值不合法的赋值Cat cat_arr2=white,525, , ,237,28.9;每个结构体常量应包括结构体中全部成
12、员的值每个结构体常量应包括结构体中全部成员的值 高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 结构体数组的使用结构体数组的使用 结构体数组中的每个元素都是一个结构体类结构体数组中的每个元素都是一个结构体类型数据,引用成员变量的方式为:型数据,引用成员变量的方式为:u数组名数组名下标下标 成员名成员名u如:如: cat_arr1.colour #include #include /包含定义有包含定义有setw()函数的头文件函数的头文件using namespace std;#define MAX_NAME_LENGTH 20/姓名的最大长度姓名的最大长度#define STUD
13、ENT_NUM_PER_CLASS 3/每个班的学生数每个班的学生数struct Student/定义学生类型定义学生类型 int number; char nameMAX_NAME_LENGTH; float score;高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 Student ourclassSTUDENT_NUM_PER_CLASS;void inputData()/输入函数输入函数 int i; for(i=0;iSTUDENT_NUM_PER_CLASS;i+) cout请输入第请输入第i+1个学生的信息(姓名不能含有空格):个学生的信息(姓名不能含有空格):n;
14、 coutourclassi.number; ; coutourclassi.score; coutn;高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 void outputData()/输出函数输出函数int i;for(i=0;iSTUDENT_NUM_PER_CLASS;i+) coutsetw(10)ourclassi.number;/stew()函数设置域宽的函数,默认是前函数设置域宽的函数,默认是前 coutsetw(20); /面加空格右对齐面加空格右对齐 coutsetw(10)ourclassi.s
15、core; coutn;void orderByScore()/排序函数排序函数 int i, j; Student temp; coutn数据处理中数据处理中.nn; for(i=0;iSTUDENT_NUM_PER_CLASS-1;i+) for(j=i+1;jSTUDENT_NUM_PER_CLASS;j+)高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 if(ourclassi.scoreourclassj.score) temp=ourclassj; ourclassj=ourclassi; ourclassi=temp; int main() inputData();
16、 cout排序前:排序前:n; outputData(); orderByScore(); cout按成绩排序后:按成绩排序后:n; outputData(); coutn; return 0;高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 指向结构体变量的指针指向结构体变量的指针 定义一个指针变量来指向一个结构体变量,定义一个指针变量来指向一个结构体变量,那么该那么该指针变量的值是结构体变量所占内存指针变量的值是结构体变量所占内存段的起始地址段的起始地址。u指针变量名成员名指针变量名成员名;u“”是指向运算符是指向运算符,表示指针指向的成员如:,表示指针指向的成员如:struc
17、t Cat char colour10; int weight; float length; Cat cat1,cat2; Cat *p; p=&cat1; pweight=525; 高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 结构体变量作为函数参数结构体变量作为函数参数 结构体变量作为函数参数共有结构体变量作为函数参数共有三种传递方式三种传递方式u值传递值传递值传递是用结构体变量作为函数的实参值传递是用结构体变量作为函数的实参,将结构体变,将结构体变量中的所有成员内容全部顺序传递给形参,此时形参量中的所有成员内容全部顺序传递给形参,此时形参必须定义为该结构体类型必须
18、定义为该结构体类型 u地址传递地址传递地址传递是指用指向结构体变量的指针作为函数参数地址传递是指用指向结构体变量的指针作为函数参数,形参接收的是变量的地址,形参类型为指向结构体类形参接收的是变量的地址,形参类型为指向结构体类型的指针类型。型的指针类型。 u引用传递引用传递引用传递是指用结构体变量的引用变量作为函数参数引用传递是指用结构体变量的引用变量作为函数参数 高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 7.1.2 共同体共同体 使不同变量使不同变量共享同一段内存的结构共享同一段内存的结构,称为,称为共共同体,又称为联合体同体,又称为联合体。共同体定义的一般形式为:共同体定
19、义的一般形式为: union 共同体类型名共同体类型名 成员类型成员类型1 成员名成员名1; 成员类型成员类型2 成员名成员名2; 成员类型成员类型n 成员名成员名n; union是结构体类型关键字是结构体类型关键字符合标识符命名规符合标识符命名规则则 共用体类型的定义应视为一个完整的语句,因此,共用体类型的定义应视为一个完整的语句,因此,在定义结束后需在结尾添加在定义结束后需在结尾添加“;” 高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 要求若工厂中的成员是工人,则给出车间号;要求若工厂中的成员是工人,则给出车间号;若是领导,则给出职务。若是领导,则给出职务。 union F
20、ac int w_pnum; char position10;高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 共同体变量的定义、初始化及使用共同体变量的定义、初始化及使用 直接定义直接定义 union Fac int w_pnum; char position10; worker,leader; 高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 间接定义间接定义u共同体类型名共同体类型名 共同体变量名共同体变量名;uFac worker,leader;无类型名定义无类型名定义 union int w_pnum; char position10; worker,lead
21、er;定义了共同体类型变量之后,系统定义了共同体类型变量之后,系统会为变量分配存储空间,共同体所会为变量分配存储空间,共同体所占的内存长度等于最长的成员的长占的内存长度等于最长的成员的长度度 高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 共用体变量的初始化共用体变量的初始化用直接定义法定义共同体变量时,可以对用直接定义法定义共同体变量时,可以对变量进行初始化。变量进行初始化。但赋的但赋的初值类型初值类型必须与必须与第一个成员的类型第一个成员的类型一致一致,初始化的一般形式为:,初始化的一般形式为:union 结构体类型名结构体类型名 成员类型成员类型1 成员名成员名1; 成员类
22、型成员类型2 成员名成员名2; 成员类型成员类型n 成员名成员名n;共同体变量名共同体变量名=第一个成员类型的初值第一个成员类型的初值;union Fac int w_pnum; char position10; worker=679; 高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 用间接定义法定义共同体变量时,不能同用间接定义法定义共同体变量时,不能同时为变量初始化,时为变量初始化,只能先定义,之后分别只能先定义,之后分别为变量的成员赋值。为变量的成员赋值。union Fac int w_pnum; char position10;Fac worker,leader;work
23、er.w_pnum=679;strcpy(leader.position,director); 高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 共同体变量的使用共同体变量的使用 共同体变量引用的一般形式为:共同体变量引用的一般形式为:u共同体变量名成员名共同体变量名成员名只能只能引用共同体变量的成员引用共同体变量的成员,而,而不能引用共同体变不能引用共同体变量。量。 即不能通过引用共同体变量得到一个值,同样也即不能通过引用共同体变量得到一个值,同样也不不能为共同体变量赋值能为共同体变量赋值,以下形式是不合法的以下形式是不合法的:ucoutworker;uworker=679; 在
24、某一点时刻上,共同体类型变量的数据类型只能在某一点时刻上,共同体类型变量的数据类型只能是是共同体成员的数据类型中的一种共同体成员的数据类型中的一种,也就是说,某,也就是说,某一点时刻上,一点时刻上,只有一个成员在起作用。只有一个成员在起作用。 高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 #include #include using namespace std;union Fac int w_pnum; char position10;void main() union Fac worker; worker.w_pnum=679; /为为worker1变量的成员变量的成员w_
25、pnum赋值赋值 coutworker.w_pnumendl; strcpy(worker.position,director);/为为worker1变量的成员变量的成员position赋值,赋值,position是是/共同体变量中最后一次被赋值的成员共同体变量中最后一次被赋值的成员 coutworker.w_pnumendl;/输出的值由覆盖它的值决定输出的值由覆盖它的值决定 coutworker.positionendl;67961701996900director高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 7.2 枚举类型枚举类型如果一个变量仅有有限个可能的取值,可以如
26、果一个变量仅有有限个可能的取值,可以将这些值一一列举出来。将这些值一一列举出来。定义枚举类型的一般形式为:定义枚举类型的一般形式为: enum 枚举类型名枚举类型名 枚举常量枚举常量1; 枚举常量枚举常量2; 枚举常量枚举常量n; enum是结构体类型关键字是结构体类型关键字符合标识符命名规符合标识符命名规则则 枚举类型的定义应视为一个完整的语句,因此,枚举类型的定义应视为一个完整的语句,因此,在定义结束后需在结尾添加在定义结束后需在结尾添加“;” 高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 enum FruitAPPLE,ORANGE,PEAR,GRAPE,PEACH;枚举
27、枚举元素是常量元素是常量,其本身是有值的,其本身是有值的,C+编编译器按定义时的顺序译器按定义时的顺序自动为常量赋值自动为常量赋值,其值,其值依次为依次为0,1,2,n。 所以所以uAPPLE=0,ORANGE=1,PEACH=4 若不使用默认值,可以在声明枚举类型时另若不使用默认值,可以在声明枚举类型时另行指定枚举元素的值:行指定枚举元素的值: enum FruitAPPLE=4,ORANGE=0,PEAR,GRAPE,PEACH;指定指定APPLE=4,ORANGE=0,其后未指定的,其后未指定的元素系统元素系统自动顺序加自动顺序加1后为其赋值后为其赋值 注意:注意:enum FruitAPPLE,ORANGE,PEAR,GRAPE,PEACH;APPLE=4;ORANGE=0;/错误错误枚举元素皆为常量,因此不能在除定义以外的位置被赋值枚举元素皆为常量,因此不能在除定义以外的位置被赋值 高级程序设计高级程序设计C+ E-Mail:c_田秀霞田秀霞 枚举类型变量的使用枚举类型变量的使用 为枚举变量赋值时要注意赋值号两端的类型为枚举变量赋值时要注意赋值号两端的类型匹配,不能将一个整型数据赋给一个枚举型匹配,不能将一个整型数据赋给一个枚举型变量:变量:uFruit f2;uf2=2; /不合法不合法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 厂房招商加工合同范本
- 做显示屏的合同或协议
- 农民工承包合同协议书
- 口头协议写下来算合同
- 养蛇代养协议合同书写
- 汽车智能化技术应用前景展望
- 卖买门市协议合同范本
- 古玩委托代买合同范本
- 公司改制劳动合同协议
- 农田便宜出租合同范本
- 2025中医技能考试题及答案
- 2025中科芯集成电路有限公司校园招聘笔试历年参考题库附带答案详解(3卷合一)
- 产品预购合同(标准版)
- 铁路工作安全培训课件
- 水泥厂设备巡检规程
- 2025年小学心理健康学科新课程标准考试测试卷
- 城乡街道环卫清洁服务方案投标文件(技术标)
- 2.1《地形》(课件)-八年级地理上册人教版
- 第4课 吃动平衡 健康体重 课件-2024-2025学年人教版(2024)初中体育与健康七年级全一册
- 致敬抗美援朝 争做时代新人-10.25抗美援朝纪念日主题班会(课件)
- 中高层管理人员绩效考核办法
评论
0/150
提交评论