八、自定义数据类型

来源:互联网 发布:控制热点软件 编辑:程序博客网 时间:2024/06/06 18:11
当内置基本数据类型不能满足需求时,就需要自定义数据类型。主要有:枚举类型、结构类型、联合类型、数组类型和类。1.枚举类型      有当遇到描述一件事情时只能取几个有限值的情况,比如,一周七天(我们可以用0到6整数表示周一至周日),比赛结果只有胜、负、平等。如果我们用整数来表示星期几那就需要判断是不是在0到6之间的合法值,但如果用枚举类型定义就没有这种问题,因为枚举类型就那几个可能的值。枚举类型的声明形式为: enum 枚举类型名   {  变量值列表 };     //变量值列表里都是整型变量,结尾是分号如:enum weekday {sun,mon,tue,wed,thu,fri,sat};上面没有指定具体数值,默认依次为0,1,2….6,即sun为零,依次对应。
同样,我们可以在声明enum类型时指定值、enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat};
上面tue等在mon的基础上依次递增。enum元素按常量处理,除了声明之外不能对它们赋值。如sun=0;这样是非法的。可以定义枚举类型的变量。整数值需要赋给枚举变量时,应进行强制类型转换
#include <iostream>using namespace std;enum game_result {WIN,LOSE,CANCEL};int main(){game_result g;  // 声明变量时,可以不写关键字enumenum game_result  r=CANCEL;   // 也可以在类型名前写上关键字enumint count;for(count=WIN;count<=CANCEL;++count){g=(game_result)count; //整数赋给enum变量,强制转换if(g==r)cout<<"CANCEL"<<endl;else if(g==WIN)cout<<"WIN"<<endl;elsecout<<"LOSE"<<endl;}return 0;}

 2.结构体
由相同或不同类型组合成的一个整体。
 struct  结构体名        {               数据类型  成员名 1;               数据类型  成员名 2;                 :               数据类型   成员名 n;        };      //结尾分号
结构体变量占用内存的大小:sizeof(结构体类型名或变量名)
 
3.联合体
      有的时候需要几个不同类型的变量共用一组内存单元,这时就需要用联合体,联合体类型声明的语法形式为:
 union 联合名      {                数据类型     成员名 1;                数据类型     成员名 2;                   :                数据类型     成员名 n;      };
同样变量的引用形式为:联合体变量名.成员名
union exa{         char  c_data;         short  s_data;         long   l_data;};
联合体占用内存的方式和上面不同,因为“共用一组内存单元”,也就是说它占用的大小为最大成员所占用的空间。如上面exa占用内存大小即为long所占用的空间大小。联合体同时只能放一个成员的值。当放c_data时占用第一个字节,同理只放s_data时占用前两个字节,只放l_data时占用全部字节。
联合体也可以没有名称,叫做无名联合体,只是声明一个成员项的集合,这些成员有相同的内存地址,可以用成员项的名字直接访问。如:
uninon{         intI;         folatf;}
在程序总可以直接用成员项i和f的名字访问i和f,比如 i=2; f=3.2;。无名联合体一般是用作结构体的内嵌成员
#include <iostream>using namespace std;union myun{int i;struct {int j;int k;int l;}s;}u;int main(){u.s.j=2;u.s.k=3;u.s.l=4;u.i=0;cout<<u.s.j<<" "<<u.s.k<<" "<<u.s.l<<endl;//输出结果为0,3,4,这是因为联合体共用内存,j的值被后面的i覆盖了return 0;}

4.类型定义语句—typedef
给已有的类型起一个别名,提高可读性。
typedef  已有类型  新类型
如:
typedef int   length;typedef double   width;length a;width b;  //这样定义提高了代码的可读性


0 0
原创粉丝点击