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;

  • 相关阅读:
    LeetCode Subsets II
    LeetCode Rotate Image
    LeetCode Palidrome Number
    LeetCode Generate Parentheses
    LeetCode Maximum Subarray
    LeetCode Set Matrix Zeroes
    LeetCode Remove Nth Node From End of List
    Linux Loop设备 使用
    Linux 文件系统大小调整
    LeetCode N-Queens II
  • 原文地址:https://www.cnblogs.com/tianqizhi/p/10256280.html
Copyright © 2011-2022 走看看