C++自定义数据类型

        C++语言不仅有丰富的系统预定义的基本数据类型,而且允许用户进行数据类型的自定义。自定义的数据类型有结构类型、联合类型、枚举类型、数组类型和类等。本文档将介绍结构体、联合体、枚举类型及typedef的应用。

1.结构体

        在某些情况下,需要将一些不同类型的数据组合成一个有机的整体。结构体是由不同数据类型的数据组成的一个集合体。

结构体的声明格式如下:

    struct 结构体名
    {
        数据类型1 成员名1;
        数据类型2 成员名2;
        ...
        数据类型n 成员名n;
    };

结构体变量定义格式如下:

    结构体名 结构体变量名;

结构体变量的使用形式如下:

    结构体变量名.成员名

        其实在结构体中也可以定义方法,结构体就是类的一个雏形。但是结构体不具备类的多态性、继承性等高级性质。

2.联合体

        有时,在程序设计中需要将几个不同类型的变量共用同一段内存单元,这时可以定义一个联合体类型。这种几个不同变量共占用同一段内存的数据结构称为联合体类型(又成共用体)。

联合体的声明格式如下:

    union 联合体名
    {
        数据类型1 成员名1;
        数据类型2 成员名2;
        ...
        数据类型n 成员名n;
    };

联合体定义格式如下:

    联合体名 联合体变量名;

联合体变量的使用形式如下:

    联合体变量名.成员名

        对于联合体还可以不声明名称,即声明为无名联合体。无名联合体没有名称,仅仅声明了一个成员项的集合,这些成员项具有相同的内存地址,可以由成员直接访问。例如:

    union
    {
        int a;
        char c;
        double x;
    };

        在程序中可以直接使用成员,例如:

    a = 18;
    c = 'A';
    x = 51.8;

【例1】联合体的应用

    #include<iostream.h>
    #include<iomanip.h>
    struct example
    {
        char id[10];
        char name[20];
        char sex;
        int age;
        union
        {
            float salary;
            float score;
        };
    }teacher,student;
    void main()
    {
        example teacher = {"000788","WangWei",'M',30,5000};
        example student = {"000518","ZhangYu",'F',20,95};
        cout<<teacher.id<<<<teacher.name<<<<teacher.sex<<" "<<teacher.age<<" "<<teacher.salary<<endl;
        cout<<student.id<<" "<<student.name<<" "<<student.sex<<" "<<student.age<<" "<<student.score<<endl;
        cout<<"sizeofstudent="<<sizeof(student)<<endl;
        cout<<"sizeofteacher="<<sizeof(teacher)<<endl;
    }

程序运行结果:

    000788    WangWei    M    30    5000
    000518    ZhangYu    F    20    95
    sizeofstudent=40
    sizeofteacher=40

        本例分析:该程序在结构体中声明了无名联合体,由于联合体变量在内存中共用同一段存储单元,因此sizeof求出的结构体变量的字节长度为40,而不是44。

3.枚举类型

        所谓枚举是指变量只有有限种可能的取值情况,即变量的值可以一一列举。

枚举类型变量的声明格式如下:

    enum 枚举类型名{变量列表}

其中,枚举类型名是程序员自定义的标识符,符合标识符命名规则即可,例如:

    enum color{red,yellow,blue,white,black};

        枚举元素具有默认值,按顺序依次为0、1、2、…枚举类型的元素按常量处理,不能赋初值,在C++系统中,枚举值可以进行关系运算,但整数值不能直接赋给枚举变量,需要进行强制类型转换。

4.typedef的应用

类型定义的使用格式如下:

    typedef 已有类型名 新类型名表;

        定义中的新类型名表可以有多个标识符,他们之间用逗号分隔。因此通过一个typedef语句可以为一个已有数据类型声明多个别名。例如:

    typedef int natural,integer;
    integer i,j;
    natural n;

【例2】typedef的应用

#include<iostream.h>
typedef struct
{
    int month;
    int day;
    int year;
}date;
void main()
{
    date birthday = {12,18,2012};
    cout<<"Your Birthday is:";
    cout<<birthday.month<<"-"<<birthday.day<<"-"<<birthday.year<<endl;
}

        程序运行结果:

    Your Birthday is:12-18-2012

        本例分析:该程序给结构体取了一个别名date(生日也是日期),该别名更符合结构体实际数据类型的具体意义,便于用户理解,提高了程序的可读性。

        需要注意的是,typedef只能对已经存在的数据类型(包括预定义的基本数据类型和用户自定义的数据类型)增加一个或多个别名,而不能创造新的数据类型。

未完待续…

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值