枚举类型的定义和应用总结

 更新时间:2013年10月16日 09:13:18   作者:  
如果一种变量只有几种可能的值,可以定义为枚举类型。所谓“枚举类型”是将变量的值一一列举出来,变量的值只能在列举出来的值的范围内

定义:
如果一种变量只有几种可能的值,可以定义为枚举类型。所谓“枚举类型”是将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。

声明:
声明枚举类型用enum开头,例如:

复制代码 代码如下:

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

上面声明了一个枚举类型weekday,花括号中的sun,mon,。。。。sat等称为枚举元素或枚举常量。

这些枚举常量,不会因为我们写了sun就自动代表着“星期天”,它只是一个符号,究竟用来代表什么含义,完全却决于程序员自己对它们的处理。


表示这个类型的变量的值只能是以上7个值之一,他们是用户自己定义的标识符。

在声明了枚举类型之后,就可以用它开定义变量。如

复制代码 代码如下:

weekday workday,week_end;

这样,workday和week_end被定义为枚举类型weekday的变量。

说明:
(1)对枚举元素按照常量处理,故称为枚举常量。它们不是变量,不能对他们赋值。

(2)枚举元素作为常量,它们是有值的,C++编译按定义时的顺序对它们赋值为0,1,2,3,......

复制代码 代码如下:

#include<iostream>
using namespace std;
int main(){
 enum weekday{sun,mon,tue,wed,thu,fri,sat};
 weekday one;
 one=sun;
 cout<<one;
 cout<<endl;
}



我们也卡一在声明枚举类型时,另行指定枚举元素的值,如
复制代码 代码如下:

#include<iostream>
using namespace std;
int main(){
 enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat};
 weekday one,two;
 one=sun;
 two=wed;
 cout<<one<<endl;
 cout<<two<<endl;
 cout<<endl;
}


指定sun为7,mon为1,以后按顺序加1,sat为6。

(3)枚举值可以用来做比较。

枚举值的比较规则是按其在声明枚举类型时的顺序号比较。如果定义时未人为指定,则第一个枚举元素的值认作0.

复制代码 代码如下:

#include<iostream>
using namespace std;
int main(){
 enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat};
 weekday one,two;
 one=sun;
 two=wed;
        cout<<(sun>wed?sun:wed);
 cout<<endl;
}



(4)一个整数不能直接赋给一个枚举变量,应先进行强制类型转换才能赋值。
复制代码 代码如下:

#include<iostream>
using namespace std;
int main(){
 enum weekday{sun,mon,tue,wed,thu,fri,sat};
 weekday one;
 one=weekday(7);
 cout<<one;
 cout<<endl;
}



以上的语句是将序号为2的枚举元素赋给one。相当于
复制代码 代码如下:

 one=sun;

一个例子:
口袋中有红、黄、蓝、白、黑5种颜色的球若干。每次从口袋中任意取出3个球,问得到3中不同颜色的球的可能取法,输出每种排列的情况。

分析:球的颜色只有5种,每一个球的颜色只能是这5种之一,因此可以用枚举类型变量来处理。

复制代码 代码如下:

/*******
设某一次取出的颜色为i,j,k。显然,i,j,k都是以上5中颜色之一,根据题意,
要求i,j,k三者互不相同。可以用穷举法,对每一种可能分别进行测试,看那一组符合条件
*****/
#include<iostream>
using namespace std;
int main(){
   enum color{red,yellow,blue,white,black};
   color pri;
   int i,j,k,n=0,loop;
   for(i=red;i<=black;i++){
    for(j=red;j<=black;j++)
     if(i!=j){
      for(k=red;k<=black;k++){
       if(k!=i&&k!=j){
        n++;//使n累加,统计可能的抽取情况
        cout<<n<<"\t";
        for(loop=0;loop<3;loop++){//通过循环,输出该次i,j,k所对应的颜色
         switch(loop){
          case 0:pri=color(i);break;
          case 1:pri=color(j);break;
          case 2:pri=color(k);break;
         }
         switch(pri){
          case red:   cout<<"red\t";break;
          case yellow:cout<<"yellow\t";break;
          case blue:  cout<<"blue\t";break;
          case white: cout<<"white\t";break;
          case black: cout<<"black\t";break;
         }
        }
        cout<<endl;
       }
      }
    }
   }
   cout<<"total:"<<n<<endl;
}

相关文章

  • C++ primer超详细讲解泛型算法

    C++ primer超详细讲解泛型算法

    泛型编程,故如其名,是一个泛化的编程方式。其实现原理为程序员编写一个函数/类的代码示例,让编译器去填补出不同的函数实现
    2022-07-07
  • 浅谈C语言的字节对齐 #pragma pack(n)2

    浅谈C语言的字节对齐 #pragma pack(n)2

    下面小编就为大家带来一篇浅谈C语言的字节对齐 #pragma pack(n)2。小编觉得挺不错的现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Qt中JSON使用的详细步骤

    Qt中JSON使用的详细步骤

    本文主要介绍了Qt中JSON使用的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • C++STL函数和排序算法的快排以及归并排序详解

    C++STL函数和排序算法的快排以及归并排序详解

    这篇文章主要为大家详细介绍了C++STL函数和排序算法的快排以及归并排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Qt编写地图之实现覆盖物坐标和搜索

    Qt编写地图之实现覆盖物坐标和搜索

    地图应用中经常会需要有覆盖物坐标和搜索的功能,本文将利用Qt实现这一功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-03-03
  • 利用C++编写简易宝可梦对战小游戏

    利用C++编写简易宝可梦对战小游戏

    本文利用C++语言编写了一个小时候课间嘴上玩的那种宝可梦游戏,只有早期的三个宝可梦和基础招式,感兴趣的朋友快跟随小编一起学习学习吧
    2022-06-06
  • C++如何实现二叉树链表

    C++如何实现二叉树链表

    这篇文章主要介绍了C++如何实现二叉树链表,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 一文搞懂C语言中的文件操作

    一文搞懂C语言中的文件操作

    文件操作想必大家掌握的并不熟练,确实因为我们用的并不多,而本节内容能够让大家初步认识文件操作,从文件认识到文件使用,让我们对c语言文件操作有个初步的了解
    2022-11-11
  • 学好C++必须做到的50条 绝对经典!

    学好C++必须做到的50条 绝对经典!

    学好C++必须做到的50条,绝对经典!想要学好C++的朋友一定要认真阅读本文,更要做到以下50条
    2016-09-09
  • 深入浅析OpenCV copyTo()函数

    深入浅析OpenCV copyTo()函数

    在Mat矩阵类的成员函数中copyTo(roi , mask)函数是非常有用的一个函数,尤其是后面的mask可以实现蒙版的功能,下面通过本文给大家介绍下OpenCV copyTo()函数的相关知识,感兴趣的朋友一起看看吧
    2022-01-01

最新评论