zoukankan      html  css  js  c++  java
  • 联合、枚举、和类型别名

      在C++里还有许多其他类型使我们暂时还没有提到的。除了对象外,C++中最重要的数据类型已经一一带来和大家见过面了。(对象将在下一节开始介绍)

      到目前为止,我们已经见过了整数、实数、字符、字符串、数组、指针和结构。今后我们还会讨论一种优于数组的向量(vector)类型。本节,我们介绍几个非主流的类型,第一个是:联合(union)。

    联合

      联合与结构有很多相似之处,联合也可以容纳多种不同类型的值,但是它每次只能存储这些值中的某一个。
      例如:我们要定义一个变量来存放某种密码,我们可以选择是你女朋友的生日、身份证最后4位数字或者你养的宠物的名字等等。
      联合类型将是一个不错的选择>>>

    union mima 
    {
        unsigned long birthday;
        unsigned short ssn;
        char* pet;
    }

      定义了这个联合类型之后,就可以像下面这样创建一个该类型的变量了:
        mima mima_1;

      再接下来,我们可以像对结构成员进行赋值那样对联合里的成员进行赋值,使用同样的语法:
        mima_1.birthday=19881301;

      上边这条语句是将值19881301存入mima_1联合的birthday里边。如果我们再执行下边语句:
        mima_1.pet="Chaozai";

      这个联合将把“Chaozai"存入mima_1联合的pet 成员,并丢弃birthday成员里的值。

    //举例
    #include <iostream>
    
    union mima
    {
        unsigned long    birthday;
        unsigned short  ssn;
        char*    pet;
    };
    
    int main()
    {
        mima mima_1;
        
        mima_1.birthday = 19881301;
        std::cout << mima_1.birthday << "
    ";
        
        mima_1.pet = "Chaozai";
        std::cout << mima_1.pet << "
    ";
        std::cout << mima_1.birthday << "
    ";//输出的是mima_1.pet 的地址
        
        return 0;
    }
    19881301
    Chaozai
    4464642
    请按任意键继续. . .
    View Code

    枚举

      枚举(enum)类型用来创建一个可取值列表:

    enum weekdays{Monday,Tuesday,Wednesday,Thursday,Friday];//不需要引号

      定义一个枚举类型之后,我们就可以像下面这样创建该类型的变量:
        weekdays today;

      然后我们像下边的方式对他进行赋值:

        today Thursday;

    #include <iostream>
    
    int main()
    {
        enum  weekdays{ Monday, Tuesday, Wednesday, Thursday, Friday };
        
        weekdays today;
        
        today = Monday1;
        std::cout << today << "
    "; // 0
        
        today = Tuesday;
        std::cout << today << "
    "; // 1
    }
    View Code

      注意,我们这里不需要使用引号,因为枚举值不是字符串。。。
      编译器会按照各个枚举值在定义时出现的先后顺序把它们与0~n-1的整数(n是枚举值的总个数)分别关联起来。
      使用枚举类型好处有两个:
        (1)它们对变量的可取值加以限制;

        (2)它们可以用做 switch条件语句的case标器。(因为字符串是不能作为标号用的!小技巧哦~)

    #include <iostream>
    
    int main()
    {
        enum  weekdays{ Monday, Tuesday, Wednesday, Thursday, Friday };
        
        weekdays today;
        
        //today = Monday1;//出错:它们对变量的可取值加以限制
        //std::cout << today << "
    "; 
        
        today = Tuesday;
        std::cout << today << "
    "; // 1
        
        switch(today)
        {
            case Monday:...
            case Thursday: ...
        }
    }
    View Code

    类型别名

      最后我们来介绍Typedef保留字,使用它可以为一个类型定义创建一个别名。
      例如,我们不喜欢使用in*来创建指针,可以像下边这样定义一个类型别名:
        typedef int*intPointer;

      在此之后,我们就可以像下面这样来定义整型括针了:

        intPointer myPointer;

  • 相关阅读:
    谈谈golang的netpoll原理(一)
    谈谈高并发秒拍系统架构设计
    Go项目实战:打造高并发日志采集系统(十)
    Go项目实战:打造高并发日志采集系统(九)
    Go项目实战:打造高并发日志采集系统(八)
    Go项目实战:打造高并发日志采集系统(七)
    海思3520v300NDI协议移植
    支持ssl的boa服务器
    多字节和宽字节互相转换
    C++实现websocket协议通讯
  • 原文地址:https://www.cnblogs.com/tianqizhi/p/10256280.html
Copyright © 2011-2022 走看看