C++程序设计与案例分析
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1.2 非基本数据类型

非基本数据类型一般由用户定义。

1. 枚举类型

只要将需要的、有限个数的值一一列举出来,便构成一个枚举类型,枚举类型用enum关键字来声明。

枚举类型的声明形式如下:

enum 枚举类型名 {枚举值列表};

例如:

          enum  weekday  {sun, mon, tue, wed, thu, fri, sat};

枚举类型应用说明:

● 对枚举元素按常量处理,不能对它们赋值。例如,下面的语句是非法的:

        sun=0;        //sun是枚举元素,不能对其赋值,此语句非法

● 枚举元素具有默认值,它们依次为:0,1,2,…例如,weekday中sun的值为0、mon的值为1、tue的值为2、…sat的值为6。

● 也可以在声明时另行定义枚举元素的值。即用等号“=”为一个枚举元素规定任意的对应整数,而且该整数增1就是下一个枚举元素默认的对应整数。例如:

        enum  weekday  {sun=7,mon=1,tue,wed,thu,fri,sat};
                //定义sun为7,mon为1,以后顺序加1,sat为6

● 枚举值可以进行关系运算。

● 整数值不能直接赋给枚举变量;如需要将整数赋值给枚举变量,应进行强制类型转换。例如:

        enum  weekday  {sun,mon,tue,wed,thu,fri,sat};
        enum  weekday  result;    //定义枚举变量result
        int  count=2;
        result=(weekday)count;    //将整型count强制转换为枚举型并赋值给result

2. 结构体类型

C++语言中,基本数据类型只能描述一些简单数据,例如,用整型描述人的年龄,用浮点型描述人的工资等。但对于复杂的数据,即包含有一个或多个数据项,各数据项可以具有相同或不同的类型,并且每个数据项的含义不同,这就无法由基本数据类型进行整体描述,必须由用户定义的结构体类型来描述,结构体类型用struct关键字来声明。

结构体类型的声明形式如下:

                                struct  结构名
                                {
                                数据类型说明符1  成员名1;
                                数据类型说明符2  成员名2;
                                    
                                数据类型说明符n  成员名n;
                                };

一个结构类型的定义以保留字struct开始,后跟一个作为结构类型名的标识符,然后从左花括号之后进行成员定义,以右花括号结束成员定义,左右花括号之间称为结构体,最后以分号结束整个结构的定义。例如:

          struct  student       //学生信息结构体
          {
          int  num;         //学号
          char  name[20];    //姓名:字符型数组,用于存放字符串,第4章详细介绍
          char  sex;         //性别
          int  age;          //年龄
          float  score;       //成绩
          char  addr[30];     //住址:字符型数组,用于存放字符串,第4章详细介绍
          };

声明了一个学生信息结构体。

要使用结构体数据,还要声明结构体变量。结构体类型变量声明的语法格式如下:

结构名 结构变量名;

注意:

● 结构变量声明在结构类型声明之后,二者也可同时进行。

● 结构变量占内存的大小可用sizeof运算求出:

sizeof(类型名或变量名)

说明结构变量的同时可以直接设置初值。

结构体成员的引用形式是:

结构变量名.成员名

3. 联合体类型

有时需要使几个不同类型的变量共用同一组内存单元,这时可以声明一个联合体类型,联合体类型用union关键字来声明。

联合体类型声明的语法格式如下:

                                union  联合名
                                {
                                    数据类型说明符1  成员名1;
                                    数据类型说明符2  成员名2;
                                        
                                    数据类型说明符3  成员名n;
                                };

联合体类型变量说明的语法格式如下:

          联合名  联合变量名;

联合体类型变量的引用格式如下:

          联合变量名.成员名

例如,有联合体类型声明如下:

        union  uarea
        {
          char  c_data;
          short  s_data;
          long  l_data;
        };

结构体类型和联合体类型的定义一样,也是由若干个数据成员所组成的,但有一点不同:在任一时刻,结构中的所有成员都是可访问的,而联合中只有一个成员是可访问的,其余所有成员都是不可访问的。这种不同反映到存储空间分配上的差别:每个结构对象包含有全部数据成员的存储空间,它所占存储空间的大小等于所有数据成员所占存储空间大小的总和,而每个联合对象所占存储空间的大小等于所有数据成员所占存储空间的最大值,在任一时刻只能从对象的首地址开始保存一个数据成员的值。对于联合,所有数据成员在存储空间上是重叠的。

4. 数组类型

数组是具有一定顺序关系的若干同类型数据的集合,组成数组的对象称为该数组的元素。数组元素用数组名与带方括号的下标表示,每个元素相当于一个简单变量,同一数组的各元素具有相同的数据类型。有关数组的详细介绍请参见第4章。

5. 指针类型

指针(Pointer)是存放内存地址的容器,是C++从C中继承过来的重要数据类型,它提供了一种较为直接的地址操作手段。正确地使用指针,可以方便、灵活而有效地组织和表示复杂的数据结构。有关指针类型的详细介绍请参见第4章。

6. 类

类(Class)是对具有共同属性和行为的一类事物的抽象描述,共同属性被描述为类中的数据成员,共同行为被描述为类中的成员函数。有关类的详细介绍请参见第6章。