您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C++程序设计(第3版)谭浩强 第7章
C++程序设计第2篇基于过程的程序设计第7章用户自定义数据类型铜陵学院汪永生目录•7.1结构体类型•7.2枚举类型•7.3用typedef声明新的类型名第7章用户自定义数据类型•7.1结构体类型•7.1.1为什么需要用结构体类型将不同类型的数据组合成一个有机的整体,以供用户方便地使用,这些组合在一个整体中的数据是相互联系的。如:声明一个结构体类型的一般形式为:struct结构体类型名{成员表};如:numnamesexagescoreaddr10010LiFangM1887.5Beijing;不能省略第7章用户自定义数据类型•7.1.2结构体类型变量的定义方法及其初始化•1.定义结构体类型变量的方法•(1)先声明结构体类型再定义变量如:Studentstudent1,student2;•(2)在声明类型的同时定义变量定义一般形式:struct结构体名{成员表;}变量名表;如:第7章用户自定义数据类型•7.1.2结构体类型变量的定义方法及其初始化•2.结构体变量的初始化•(1)结构体定义时指定初始化如:•(2)声明类型与定义变量分开的形式如:第7章用户自定义数据类型•7.1.3引用结构体变量•2.结构体变量的初始化•(1)可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量。如:student1=student2;•(2)可以引用一个结构体变量中的一个成员的值。引用结构体变量中成员的一般形式为结构体变量名.成员名如:student1.num;student1.num=10010;例7.1定义两个结构体变量student1和student2,成员包括学号、姓名、性别、出生日期、成绩。对student2初始化,再把student2的值赋给student1。输出student1的各成员。第7章用户自定义数据类型•7.1.3引用结构体变量•2.结构体变量的初始化例7.1定义两个结构体变量student1和student2,成员包括学号、姓名、性别、出生日期、成绩。对student2初始化,再把student2的值赋给student1。输出student1的各成员。第7章用户自定义数据类型•7.1.4结构体数组结构体数组每个元素都是一个结构全类型的数据,它们分别包括各个成员项。例7.2对候选人得票的统计程序。设有3个候选人,最终只能有1个人当选为领导。今有10个人参加投票,从键盘先后输入这10个人所投候选人的名字,要求最后输出各候选人得票结果。方法一:数组法第7章用户自定义数据类型•7.1.4结构体数组结构体数组每个元素都是一个结构全类型的数据,它们分别包括各个成员项。例7.2对候选人得票的统计程序。设有3个候选人,最终只能有1个人当选为领导。今有10个人参加投票,从键盘先后输入这10个人所投候选人的名字,要求最后输出各候选人得票结果。方法二:string法第7章用户自定义数据类型•7.1.5指向结构体变量的指针一个结构体变量的指针就是该变量所占据的内存段的起始地址,可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。•1.通过指向结构体变量的指针引用结构体变量中的成员例7.3定义一个结体变量stu,成员包括学号、姓名、性别、成绩。定义一个指针变量p指向该结构体变量stu,通过该指针变量输出各成员的值。结构体变量的指针引用成员变量方法:(1)(*p).成员名(2)p-成员名第7章用户自定义数据类型•7.1.5指向结构体变量的指针•2.用结构体变量和指向结构体变量的指针构成链表链表是一种常见的重要的数据结构。例7.4建立一个如图7.6所示的简单链表,它由3个学生数据的结点组成。输出各结点中的数据。第7章用户自定义数据类型•7.1.6结构体类型数据作为函数参数将一个结构体变量中的数据传递给另一个函数,方法有3种:(1)用结构体变量名作参数。(2)用指向结构体变量的指针作实参,将结构体变量的地址传给形参。(3)用结构体变量的引用作函数形参,它就成为实参的别名。例7.5有一个结构体变量stu,内含学生学号、姓名和3门课的成绩。要求在main函数中为各成员赋值,在另一函数print中将它们值输出。(1)用结构体变量作函数参数第7章用户自定义数据类型•7.1.6结构体类型数据作为函数参数•例7.5有一个结构体变量stu,内含学生学号、姓名和3门课的成绩。要求在main函数中为各成员赋值,在另一函数print中将它们值输出。(2)用指向结构体变量的指针作实参第7章用户自定义数据类型•7.1.6结构体类型数据作为函数参数•例7.5有一个结构体变量stu,内含学生学号、姓名和3门课的成绩。要求在main函数中为各成员赋值,在另一函数print中将它们值输出。(3)用结构体变量的引用作函数参数3种方法的比较:程序(1)用结构体变量作实参和形参,虚实结合时空间和时间的开销比较大,效率不高;程序(2)采用指针变量作为实参和形参,空间和时间开销较小,效率较高。程序(3)的实参是结构体变量,形参用引用,虚实结合时传递的是实参地址,效率较高,兼有(1)和(2)的优点。第7章用户自定义数据类型•7.1.7用new和delete运算符进行动态分配和撤销存储空间new运算符使用的一般格式为:new类型[初值]例如:newint;newint(100);newchar[10];newint[5][4];float*p=newfloat(3.1459);注:用new分配数组空间时不能指定初值。如果由于内存不足等原因而无法正常分配空间,则new会返回一个空指针NULL,用户可以根据该指针的值判断分配空间是否成功。第7章用户自定义数据类型•7.1.7用new和delete运算符进行动态分配和撤销存储空间delete运算符使用的一般格式为:delete指针变量或delete[]指针变量例如:deletep;//p开辟的空间指针变量delete[]pt;//pt为指向数组地址指针变量第7章用户自定义数据类型•7.1.7用new和delete运算符进行动态分配和撤销存储空间例7.6临时开辟一个存储空间以存放一个结构体数据。假设已声明了一个结构体类型Student(成员包括name,num,sex)。如有下面的程序段:第7章用户自定义数据类型•7.2枚举类型枚举(enumeration)类型是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。声明枚举类型的一般形式为:enum枚举类型名{枚举常量表};例如:enumweekday{sun,mon,tue,wed,thu,fri,sat}workday,week_end;说明:(1)枚举元素按常量处理,故称枚举常量。(2)枚举元素作为常量,它们是有值的,其值是一个整数,编译系统定义时的顺序对它们赋值为0,1,2,……(3)枚举值可以用来做判断比较,按整数比较规则进行比较。(4)不能把一个整数直接赋给一个枚举变量,枚举变量只能接受枚举类型数据。第7章用户自定义数据类型•7.2枚举类型例7.7口袋中有红、黄、蓝、白、黑5种颜色的球若干。每次从口袋中任意取出3个球,问得到不同颜色的球的取法,输出每种排列的情况。第7章用户自定义数据类型•7.3用typedef声明新的类型名声明一个新的类型名的方法:(1)先按定义变量的方法写出定义语句(如inti;).(2)将变量名换成新类型名(如将i换成COUNT,即intCOUNT;)。(3)在最前面加typedef(如typedefintCOUNT)。(4)然后可以用新类型名去定义变量。例如:typedefintINTEGER;//指定用标识符INTEGER代表int类型typedeffloatREAL;//用指定REAL代表float类型inti,j;floata,b;等价于:INTEGERi,j;REALa,b;typedefstruct{intmonth;intday;intyear;}DATE;//DATE是新类型名,而不是结构体变量名。用DATE定义变量,如:DATEbirthday,*p;typedefintNUM[100];NUMn;//声明NUM为整型数组类型,包含100个元素,并定义n为包含100个整型元素的数组
本文标题:C++程序设计(第3版)谭浩强 第7章
链接地址:https://www.777doc.com/doc-3205133 .html