c++第7章自定义数据类型

上传人:E**** 文档编号:90468862 上传时间:2019-06-12 格式:PPT 页数:37 大小:205KB
返回 下载 相关 举报
c++第7章自定义数据类型_第1页
第1页 / 共37页
c++第7章自定义数据类型_第2页
第2页 / 共37页
c++第7章自定义数据类型_第3页
第3页 / 共37页
c++第7章自定义数据类型_第4页
第4页 / 共37页
c++第7章自定义数据类型_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《c++第7章自定义数据类型》由会员分享,可在线阅读,更多相关《c++第7章自定义数据类型(37页珍藏版)》请在金锄头文库上搜索。

1、第7章 自定义数据类型,7.1 结构体类型 7.2 共用体 7.3 枚举类型 7.4 用typedef声明类型,7.1 结构体类型 7.1.1 结构体概述,C+的内部数据类型只有简单的整数和浮点。实际问题中涉及大量的复合数据,这些复合数据可用结构型struct来描述。 比如日期由年、月、日三个整型数据量表示,可用结构描述为: struct Date int year; int month; int day; ;,又如学生的信息包括学号、姓名、性别、年龄,可用如下结构描述: struct Student int sno; string name; bool sex; ;,定义结构类型的格式,st

2、ruct 结构类型名 类型名 变量1; 类型名 变量2; ;,7.1.2 结构体类型变量的定义方法及其初始化 1. 定义结构体类型变量的方法,Student s1; Date d; /在声明类型的同时定义变量,不常用 struct Student int sno; string name; bool sex; s;,2. 结构体变量的初始化,Student s=20,“sky“,true;,7.1.3 结构体变量的引用,在定义了结构体变量以后,可以引用这个变量。 可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量。 Student s1=20,“sky“,true,s2; s2=s1;

3、 可以引用一个结构体变量中的一个成员的值。 couts2.nameendl;,如果成员本身也是一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员。 #include using namespace std; struct Father string name; int tel; ;,struct Student int sno; string name; bool sex; Father father; /成员也可以是一个结构体变量。 ; int main() Student s1=20,“sky“,true,“wang“,123456,s2; couts1.father.n

4、ameendl; return 0; ,不能将一个结构体变量作为一个整体进行输入和输出。 Sudent s; s.sno=123; s.name=“zhang“; s.sex=1; couts; / couts.sno“ “s.nameendl; / s=25,“wang“,0; /?,对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算种类) Student s=20,“sky“,true; +s.sno;,7.1.4 结构体数组,结构体数组:每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项。 #include using namespace std;

5、 struct Student int sno; string name; bool sex; ; int main() Student s3=20,“sky“,1,21,“Li“,0,22,“Zhang“,0; couts2.nameendl; return 0; ,结构体数组应用举例,对候选人得票的统计程序。设有3个候选人,最终只能有1人当选为领导。今有10个人参加投票,从键盘先后输入这10个人所投的候选人的名字,要求最后输出这3个候选人的得票结果。,#include using namespace std; struct Person /声明结构体类型Person char name20

6、; int count; ; int main( ) Person leader3=“Li“,0,“Zhang“,0,“Wang“,0; char leader_name20; /leader_name为投票人所选的人的姓名,for (int i=0;ileader_name; /先后输入10张票上所写的姓名 for (int j=0;j3;j+) /将票上姓名与3个候选人的姓名比较 if (strcmp(leader_name,leaderj.name)=0) leaderj.count+; /如果与某一候选人的姓名相同,就给他加一票 coutendl; for (int i=0;i3;i+

7、) /输出3个候选人的姓名与最后得票数 coutleaderi.name“:“leaderi.countendl; return 0; ,7.1.5 指向结构体变量的指针,Student stu; Student *p=,7.1.6 结构体类型数据作为函数参数,将一个结构体变量中的数据传递给另一个函数,有下列3种方法: (1) 用结构体变量名作参数。一般较少用这种方法。 (2) 用指向结构体变量的指针作实参,将结构体变量的地址传给形参。 (3) 用结构体变量的引用变量作函数参数。,#include using namespace std; struct Student int sno; str

8、ing name; ; void print(Student s); void print(Student *p); /void print(Student ,int main() Student s=22,“Zhang“; print(s); print( /,7.1.7 动态分配和撤销内存的运算符new和delete,在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C+提供了较简便而功能较强的运算符new和delete来取代malloc和free函数。注意: new和delete是运算符,不是函数,因此执行效率高。虽然为了与C语言兼容,C+仍保留malloc和free函

9、数,但建议用户不用malloc和free函数,而用new和delete运算符。,动态分配内存,堆区(动态内存分配区),存放程序的动态数据。由malloc系列函数或new操作符分配的内存,使用new和delete的格式如下:,指针变量名=new 类型名(初始化式); delete 指针名; new运算符返回的是一个指向所分配类型变量(对象)的指针。 对于所创建的变量或对象,都是通过该指针来间接操作的,而动态创建的对象本身则没有名字。 自由存储区是不会自动在分配时进行初始化(包括清0)的,所以必须用初始化式来显式初始化。new表达式的操作过程为:在自由存储区中为变量或对象分配内存,然后用括号中的值

10、初始化该变量(对象)。,如:,int *pi=new int(0); 当pi所指向的变量生命期结束时(不再使用了),必须释放pi所指向的目标占用的内存空间: delete pi; 对数组进行动态内存分配和撤消的格式为: 指针变量名=new 类型名下标表达式; 注:下标表达式不必是常量表达式。 delete 指向该数组的指针变量名;,动态数组应用例:,#include using namespace std; void input(int m ,int n); int sum(int m ,int n); int main( ) int n; coutn; int *m=new intn; in

11、put(m,n); cout“sum=“sum(m,n)endl; delete m; ,void input(int m ,int n) coutmi; int sum(int m ,int n) int sum=0; for(int i=0;in;+i) sum+=mi; return sum; ,例 开辟空间以存放一个结构体变量。,#include #include using namespace std; struct Student /声明结构体类型Student string name; int num; char sex; ; int main( ) Student *p; /定

12、义指向结构体类型Student的数据的指针变量 p=new Student; /用new运算符开辟一个存放Student型数据的空间 p-name=“Wang Fun“; /向结构体变量的成员赋值 p-num=10123; p-sex=m; coutnamenumsexendl; /输出各成员的值 delete p; /撤销该空间 return 0; ,7.2 共用体,使几个不同的变量共占同一段内存的结构称为共用体(联合)。 声明共用体类型的一般形式为: union 共用体类型名 类型名 变量1; 类型名 变量2; ;,例:,union Data int i; char c; ; Data a

13、; a.i=24; a.c=a; “共用体“与“结构体“的定义形式相似,但它们的含义是不同的。结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有其自己的内存单元。共用体变量所占的内存长度等于最长的成员的长度。,7.3 枚举类型,生活中很多信息,在计算机中都适于用数值来表示,比如,从星期一到星期天,我们可以用数字来表示。 现在,有一行代码,它表达今天是周3: int today = 3; 很多时候,我们可以认为这已经是比较直观的代码了,不过可能在6个月以后,我们初看到这行代码,会在心里想:是说今天是周3呢,还是说今天是3号?其实我们可以做到更直观,并且方法很多。,第一种是使用宏定义

14、:,#define SUNDAY 0 #define MONDAY 1 #define TUESDAY 2 #define WEDNESDAY 3 #define THURSDAY 4 #define FRIDAY 5 #define SATURDAY 6 int today = WEDNESDAY;,第二种是使用常量定义:,const int SUNDAY = 0; const int MONDAY = 1; const int TUESDAY = 2; const int WEDNESDAY = 3; const int THURSDAY = 4; const int FRIDAY = 5

15、; const int SATURDAY = 6; int today = WEDNESDAY;,第三种方法就是使用枚举。,枚举是一种用户自定义数据类型。枚举类型的原有数据只能是int,是在整数的取值范围中,列出需要的个值作为新数据类型的取值范围。 定义枚举类型的基本语法: enum 枚举类型名 枚举值1,枚举值2, ; enum : 是定义枚举类型的关键字。 枚举类型名 :我们要自定义的新的数据类型的名字。 枚举值 :可能的个值。,enum Week SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY; 这就定义了一个新的数据类型:Week。 Week数据类型来源于int类型(默认)。 Week类型的数据只能有种取值,它们是:SUNDAY,MONDAY,TUESDAYSATURDAY。 其中SUNDAY = 0,MONDAY = 1SATURDAY = 。也就是说,第个枚举值代表,第个枚举值代表,这样依次递增。,不过,也可以在定义时,直接指定某个或某些枚举值的数值。比如,用来表示星期天。这样我们需要的个值就是 1,2,3,4,5,6,7。可以这样定义: enum Week MONDAY = 1, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SAT

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号