精华内容
下载资源
问答
  • C++枚举型变量用法

    2013-11-04 18:35:55
    #include #include using namespace std; int main() { enum name{one,two=23,three}; //强制类型转换 int a=one; ...//枚举变量赋值 name test=two; cout //强制类型转换
    #include <iostream>
    
    #include <string>
    using namespace std;


    int main()
    {

    enum name{one,two=23,three};

    //强制类型转换
    int a=one;
    cout<<a<<endl;


    //不能这样直接赋值
    //one=10;


    //枚举变量赋值
    name test=two;
    cout<<test<<endl;


    //强制类型转换
    name myname=name(10);
    cout<<myname<<endl;




    return 0;
    }
    展开全文
  • ★C语言常见的数据类型有:  整型 ...★这里就来介绍枚举型(enum)与布尔型(bool): *********************************************************************************************************...

    ★C语言常见的数据类型有:

        整型

        浮点型

        字符型

        数组

        结构体

        指针

    ★这里就来介绍枚举型(enum)与布尔型(bool):

    ****************************************************************************************************************************************

     

    一:枚举型(enum) 

    枚举型的出现是为了更简洁的对数据进行处理:

    举个例子:

    #define MON  1
    #define TUE   2
    #define WED  3
    #define THU   4
    #define FRI    5
    #define SAT   6
    #define SUN   7

    这里要用7个#define来对7个整型数进行变量重命名,当然很繁琐,于是枚举类型应运而生,

    ★枚举类型的定义与赋值:

    enum Day {Mon=1,Tue=2,Wen,Thu,Fri,Sat,Sun}; 

    没有赋值的部分,自动继承上一个数据+1的值,也可对每个名称进行赋新的值。

    ★枚举类型的两种使用方法:

    int main_1()
    {
    	enum Day yesterday,today,tomorrow;
    	yesterday = Mon;
    	today = Tue;
    	tomorrow = Wen;
    	printf("%d %d %d \n",yesterday,today,tomorrow);
    	return 1;
    }
    
    int main_2()
    {
    	enum Day yesterday=Mon,today=Tue,tomorrow=Wen;
    	printf("%d %d %d \n",yesterday,today,tomorrow);
    	return 2;
    }

     

    二:布尔型(bool) 

    布尔型的值只有两个:false(假)和true(真);

        且false的序号为0,true的序号是1(或者是非0);

    经常配合while(true/false/0/)使用。

    #include <stdio.h>
    
    int main()
    {
    	int i = 1;
    	while(true)
    	{
    		printf("***\n");
    		if(i==5)
    		{
    			break;
    		}
    		i++;
    	}
    	return 0;
    }

     

     

     

     

    ****************************************************************************************************************************************

     

                 最快的脚步不是跨越,而是继续,最慢的步伐不是小步,而是徘徊。
     

    ****************************************************************************************************************************************

    展开全文
  • C++枚举

    2014-07-31 14:12:38
    转自:深入理解C++枚举类型enum

    深入理解C++枚举类型enum


    为啥需要枚举类型

    编程语言中的所有特性都是为了满足某种需求,达到某个目的还出现.不会莫名其妙的出现在那.

    枚举可以用来保存一组属性的值.enum的全称是enumeration意思是列举

    看着这句话可能觉得太书面化了,不够通俗易懂.那举些通俗的例子说说.日常生活中我们特喜欢分类,比如读书时分啥数,理,化.当官的级别有啥省长,市长,县长.军队有军长,师长,团长.这样一组组的属性值就最适合用枚举类型来表示.当用一个软件时,有些页面会有很多单选按钮(radio button),这也特别适合用枚举来表示你举了哪一个.

     

    光这样说你可能还不能体现枚举的好处.如果没枚举,表示一些组属性的值你只能用一组数字,或者一组字符串.

    数字从字面上看不出任意意义,可读性非常差,所以很少用.那就假如要你通过比较字符串来做很多种类判断,比如 if(HisTitle == "stadholder")   else if(HistTile == "mayor") .如果让你敲个几十次你就知道是件多麻烦痛苦的事了,很多单词如果敲错一个意思就完全变了,这样出现bug了也不容易找到.老是复制粘贴也较麻烦.所以字符串是编辑麻烦,容易出错.如果要使用枚举就极大的方便我们敲代码,集成开发工具中的智能感应会给你提示,敲个点号就带出来了.而且枚举会做类型检查,不会像字符串那样只能靠你自己去对比.

     

    枚举类型的内存分配问题

     

    上面我们讲了如果没有枚举,一般会想到用数字或字符串表示某个类别.这样使用肯定不方便.也许你可能会想到用宏来表示.比如#define 市长 "mayor" 或者#define 市长 2

    这自然是一个方法,但一来嘛在C++中是不太推荐用宏的,尽量少用.因为C++是强类型的语言,希望通过类型检查来降低程序中的很多错误,而宏只是在编译期前做简单替换,绕过了类型检查,失去了强类型系统的优势支撑. 二来嘛一组属性值都是相关联的信息,必须放到一起,放到一组.

     

    关于常量的误解

    枚举类型成员是常量

    这句话怎么理解呢.也就是说enum  MyEnum{ one = 1 , two , three} ;

    与 const int one = 1;  const int two = 2; const int three = 3; 差不多是一样的.

     

    说到常量其实有个非常误导人的地方因为用宏#define 可以定义的我们说是常量,这里只涉及到简单的替换自然不可能存在内存分配问题.但是用const定义的也叫常量,而const定义常量貌似跟定义一般的变量只多个const关键字. 你可能会想当然认为常量都只是简单替换,所以不存在内存分配.那按这个逻辑,岂不是const定义的常量,枚举类型都没有内存分配?

    实际上大部分时候确实是这样的.但并非总是如此,有些情况会需要分配内存的.

     

    1.不需要分配内存的情况

    如果定义常量const int one = 1;然后在其他地方只是把one作为右值赋值给其他变量那就不存在内存分配.但这里的常量跟#define定义的常量不同,宏定义的常量是编译前简单替换掉,而不需要做类型检查.而const定义的常量在编译时会帮类型检查,编译完之后再做替换.所以编译完之后就看不到const的信息了,转换成对应的值.const定义的信息只是保存在符号表中.

    那同样,如果只是enum MyEnum{ one = 1 , two , three} ;这样定义一个枚举类型,然后也是简单的作右值赋值给其他变量.比如int num = MyEnum::one;那也只是保存信息在符号表中,编译后被替换掉了.

    有人可能说如果用sizeof MyEnum测下会发现会是4(这是VS里面,不同的编译器可能不一样)于是认为不管是枚举里面有多少个元素内存分配都是4.实际上不是这意思,应该是定义一个MyEnum类型的枚举变量时会分配内存.这跟定义了一个类一样,你用sizeof去测一个为也会看到大小,但我们知道只有当类实例化之后才实际分配内存的.

     

    2.需要分配内存的情况

    1.)const int one;是类的成员变量 2. )extern const int one = 123;    3.)const int one = 1;    int* pConst = &one;

    上面三种情况会需要分配内存.

    而枚举类型,如果不是简单的去给其他变量赋值,而是去定义一个枚举类型变量.

    比如MyEnum grade = MyEnum::one; //此时会分配4字节内存空间.(不过据说编译器会做优化,如果枚举类型所有值用两个字节表示就足够了,那实际分配的会就只会是两字节了.不一定就是默认的int类型的长度)

     

     

    枚举类型具体用法

    一般的用法是在全局域内定义一个枚举类型.比如

    enum  MyEnum { one, two, three }

    如果不显式指定,就会把第一个值默认赋值为0,然后递增1依次赋值.如果显式指定了某个值,则它下一个是它加1.

    所以上面的例子中默认one = 0; two = 1; three= 2;

    如果显式指定enum MyEnum { one, two = 3, three }

    则one = 0; two = 3; three = 4;

     

    定义一个枚举类型就是MyEnum grade = MyEnum::one;

     

    类中使用枚举这是不太常用的用法.

    在类中声明一个枚举后,定义枚举类型就可以省掉那个域作用前缀.比如MyEnum my = one; 在相同的作用域内也不能出现某个变量的名字和枚举中的元素名字相同,也就是不能出现其他变量名字是on,two, three

    另外枚举还有一种少见的用法是

    enum { one ,two ,three};  就是不指定一个名字,这样我们自然也没法去定义一些枚举类型了.此时就相当于const int one = 0;这样定义三个常量一样.

    然后用的话就是int no = one;



    C++11强类型枚举

    C++11强类型枚举】  

      在标准C++中,枚举类型不是类型安全的。枚举类型被视为整数,这使得两种不同的枚举类型之间可以进行比较。C++03 唯一提供的安全机制是一个整数或一个枚举型值不能隐式转换到另一个枚举别型。 此外,枚举所使用整数类型及其大小都由实现方法定义,皆无法明确指定。 最后,枚举的名称全数暴露于一般范围中,因此C++03两个不同的枚举,不可以有相同的枚举名。 (好比 enum Side{ Right, Left }; 和 enum Thing{ Wrong, Right }; 不能一起使用。)

    C++11 引进了一种特别的 "枚举类",可以避免上述的问题。使用 enum class 的语法来声明:

    enum class Enumeration
    {
      Val1,
      Val2,
      Val3 = 100,
      Val4 /* = 101 */,
    };
    

    此种枚举为类型安全的。枚举类型不能隐式地转换为整数;也无法与整数数值做比较。 (表示式 Enumeration::Val4 == 101 会触发编译期错误)。

    枚举类型所使用类型必须显式指定。在上面的示例中,使用的是默认类型 int,但也可以指定其他类型:

    enum class Enum2 : unsigned int {Val1, Val2};
    

    枚举类型的语汇范围(scoping)定义于枚举类型的名称范围中。 使用枚举类型的枚举名时,必须明确指定其所属范围。 由前述枚举类型 Enum2 为例,Enum2::Val1是有意义的表示法, 而单独的 Val1 则否。

    此外,C++11 允许为传统的枚举指定使用类型:

    enum Enum3 : unsigned long {Val1 = 1, Val2};
    

    枚举名 Val1 定义于 Enum3 的枚举范围中(Enum3::Val1),但为了兼容性, Val1 仍然可以于一般的范围中单独使用。

    在 C++11 中,枚举类型的前置声明 (forward declaration) 也是可行的,只要使用可指定类型的新式枚举即可。 之前的 C++ 无法写出枚举的前置声明,是由于无法确定枚举参数所占的空间大小, C++11 解决了这个问题:

    enum Enum1;                     // 不合法的 C++ 與 C++11; 無法判別大小
    enum Enum2 : unsigned int;      // 合法的 C++11
    enum class Enum3;               // 合法的 C++11,列舉類別使用預設型別 int 
    enum class Enum4: unsigned int; // 合法的 C++11
    enum Enum2 : unsigned short;    // 不合法的 C++11,Enum2 已被聲明為 unsigned int

    展开全文
  • 再对枚举型变量赋值 */ enum DAY yesterday, today, tomorrow; yesterday = MON; today = TUE; tomorrow = WED; printf("%d %d %d \n", yesterday, today, tomorrow); }
  • C++ 枚举类型

    2019-01-09 18:49:45
    枚举类型的定义:枚举类型(enumeration)是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。 定义格式:枚举类型的定义格式为: enum &amp;lt;类型名&amp;gt; {&amp;lt;枚举常量表&...

    枚举类型的定义:枚举类型(enumeration)是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。
    定义格式:枚举类型的定义格式为:

    enum <类型名> {<枚举常量表>};
    

    格式说明:

    关键字enum——指明其后的标识符是一个枚举类型的名字。
    枚举常量表——由枚举常量构成。“枚举常量"或称"枚举成员”,是以标识符形式表示的整型量,表示枚举类型的取值。枚举常量表列出枚举类型的所有取值,各枚举常量之间以","间隔,且必须各不相同。取值类型与条件表达式相同。
    应用举例:

    enum color_set1 {RED, BLUE, WHITE, BLACK}; // 定义枚举类型color_set1
    enum week {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; // 定义枚举类型week
    

    重要提示:

    枚举常量代表该枚举类型的变量可能取的值,编译系统为每个枚举常量指定一个整数值,缺省状态下,这个整数就是所列举元素的序号,序号从0开始。 可以在定义枚举类型时为部分或全部枚举常量指定整数值,在指定值之前的枚举常量仍按缺省方式取值,而指定值之后的枚举常量按依次加1的原则取值。 各枚举常量的值可以重复。例如:

    enum fruit_set {apple, orange, banana=1, peach, grape}
    //枚举常量apple=0,orange=1, banana=1,peach=2,grape=3。
    
    enum week {Sun=7, Mon=1, Tue, Wed, Thu, Fri, Sat};
    //枚举常量Sun,Mon,Tue,Wed,Thu,Fri,Sat的值分别为7、1、2、3、4、5、6。
    

    枚举常量只能以标识符形式表示,而不能是整型、字符型等文字常量。例如,以下定义非法:

    enum letter_set {'a','d','F','s','T'}; //枚举常量不能是字符常量
    enum year_set{2000,2001,2002,2003,2004,2005}; //枚举常量不能是整型常量
    

    可改为以下形式则定义合法:

    enum letter_set {a, d, F, s, T};
    enum year_set{y2000, y2001, y2002, y2003, y2004, y2005};
    

    枚举变量的使用
    定义枚举类型的主要目的是:增加程序的可读性。枚举类型最常见也最有意义的用处之一就是用来描述状态量,这点将在第9章 输入输出流类看到。

    定义格式:定义枚举类型之后,就可以定义该枚举类型的变量,如:

    color_set1 color1, color2;
    

    亦可类型与变量同时定义(甚至类型名可省),格式如下:

      enum {Sun,Mon,Tue,Wed,Thu,Fri,Sat} weekday1, weekday2;
    

    相关操作
    枚举变量的值只能取枚举常量表中所列的值,就是整型数的一个子集。

    枚举变量占用内存的大小与整型数相同。

    枚举变量只能参与赋值和关系运算以及输出操作,参与运算时用其本身的整数值。例如,设有定义:

    enum color_set1 {RED, BLUE, WHITE, BLACK} color1, color2;
    enum color_set2 { GREEN, RED, YELLOW, WHITE} color3, color4;
    

    则允许的赋值操作如下:

          color3=RED;           //将枚举常量值赋给枚举变量
            color4=color3;        //相同类型的枚举变量赋值,color4的值为RED
            int  i=color3;        //将枚举变量赋给整型变量,i的值为1
            int  j=GREEN;         //将枚举常量赋给整型变量,j的值为0
    
    

    允许的关系运算有:==、<、>、<=、>=、!=等,例如:

    //比较同类型枚举变量color3,color4是否相等
    if (color3==color4) cout<<"相等";
    //输出的是变量color3与WHITE的比较结果,结果为1
    cout<< color3<WHITE;
    

    枚举变量可以直接输出,输出的是变量的整数值。例如:

        cout<< color3;         //输出的是color3的整数值,即RED的整数值1
    

    实例
    口袋中有红、黄、蓝、白、黑五种颜色的球若干个,每次从口袋中取三个不同颜色的球,统计并输出所有的取法。

    分析:由于球只能是五种颜色之一,故可用枚举类型表示球的颜色。设取出的球为i、j、k,根据题意,i、j、k分别可以有五种取值,且i≠j≠k。可以用穷举法,逐个检验每一种可能的组合,从中找出符合要求的组合并输出。

    实例
    #include<iostream>
    #include<iomanip>
    using namespace std;
    int main(){
        enum color_set {red,yellow,blue,white,black}; //声明枚举类型color
        color_set color; 
        int i,j,k,counter=0,loop; //counter是累计不同颜色的组合数
        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){        //第三个球不同于前两个,满足要求
                        counter++;
                        if((counter)%22==0){ //每屏显示22行
                            cout<<"请按回车键继续";
                            cin.get();
                        }
                        cout<<setw(15)<<counter;
                        /*下面输出每种取法,一行为一种取法的三个颜色*/
                        for(loop=1;loop<=3;loop++){
                            switch(loop){
                                case 1: color=(color_set) i; break;    //第一个是i
                                case 2: color=(color_set) j; break;    //第二个是j
                                case 3: color=(color_set) k; break;    //第三个是k
                            }
                            switch(color){
                                case red:   cout<<setw(15)<<"red";   break;
                                case yellow:cout<<setw(15)<<"yellow";break;
                                case blue:  cout<<setw(15)<<"blue";  break;
                                case white:    cout<<setw(15)<<"white"; break;
                                case black: cout<<setw(15)<<"black"; break;
                            }
                        }
                        cout<<endl;            //输出一种取法后换行
                    }
                }
            }
        }
        cout<<"共有:"<<counter<<"种取法"<<endl;
        return 0;
    }
    

    重要提示
    枚举变量可以直接输出,但不能直接输入。如:cout >> color3; //非法
    不能直接将常量赋给枚举变量。如: color1=1; //非法
    不同类型的枚举变量之间不能相互赋值。如: color1=color3; //非法
    枚举变量的输入输出一般都采用switch语句将其转换为字符或字符串;枚举类型数据的其他处理也往往应用switch语句,以保证程序的合法性和可读性。

    展开全文
  • c++ 枚举类型

    2016-04-12 15:51:51
    定义:C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。 语法:enum {}; 作用:限制对象的取值只能在枚举集合列表。 代码示例: 使用: 1) 初始化,enum Name{a = 1, b, c = 1, d},此时a = 1, b = ...
  • C++枚举类型

    2020-08-04 22:03:40
    今天接触了一个虽然一直听说过但是一直没怎么用的数据类型——枚举类型 枚举是常量的集合 枚举是为了避免宏定义过多而让人看起来复杂,使代码更加简化 枚举类型定义 枚举类型的定义方式与结构体很像 enum MyEnum { ...
  • C++ 枚举

    2020-03-19 20:31:16
    默认的底层类型是int,但是新的C++标准中可以自定义底层类型。 例: enum class Type {General,Light,Medium,Heavy}; //底层类型默认是int enum class Type: char{General,Light,Medium,Heavy}; ...
  • C++枚举使用

    万次阅读 2017-12-18 01:41:00
    关于enum class与enum struct以及普通枚举的实例
  • C++ 枚举类型enum

    2021-01-16 16:42:35
    枚举: 在一定的范围内取值,从确定值开始连续取值加一,若无确定值则从零开始 并且这个取值必须是枚举中的任意一个且只有一个 ...PS:枚举成员值从确定值开始连续取整值,若第一个枚举成员值不给
  • C++ 枚举工具

    2019-09-12 19:35:02
    C++的enum工具提供了另一种创建符号常量的方式,这种方式可以替代const。它还允许定义新类型,但必须按严格的限制进行。使用enum的语法与使用结构相似。 Enum DemoEnum{ demoOne, demoTwo, demoThree }; 默认...
  • C++ 枚举类型详解

    2021-02-10 02:25:46
    枚举类型的定义:枚举类型(enumeration)是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。 定义格式:枚举类型的定义格式为: enum <类型名> {<枚举常量表>}; 格式说明: 关键字...
  • C++枚举类型enum

    千次阅读 2016-01-12 09:50:15
    在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内有七天,一年有十二个月,一个班每周有六门课程等等。...为此,C++语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中
  • C++枚举类型同名冲突问题

    千次阅读 2019-11-26 15:15:38
    C++枚举类型同名冲突问题 今天被C++枚举类型困扰了……之前写程序一直没有留意到这个问题,原来在C++中使用多个枚举类型时也是不能出现同名的。DAMN IT! 个人认为这一点C++的实现确实是不如C#中那样的枚举类型先进...
  • C++枚举类型详解

    2019-12-28 08:00:16
    本文转载自:https://www.cnblogs.com/shrimp-can/p/5171110.html 作者:shrimp-can 转载请注明该声明。...一、枚举类型的定义 enum 类型名 {枚举值表}; 类型名是变量名,指定枚举类型的名称。 枚举值表也叫枚...
  • C++枚举体知识点小结

    2017-04-16 12:31:30
    C++枚举体类型小结总结一下最近碰到到枚举体相关的知识点: 首先说明一下定义,枚举体是一种数据类型,用于存储用户定义的数据集合,一个枚举体类型定义后, 它和整型数据类型如 int, long 等的用法类似. 定义枚举体...
  • C++枚举类的使用

    2021-07-25 19:36:10
    枚举是一种由编程者自定义的数据类型如果一个变量只有几种可能的取值,则可以定义为枚举类,比如一周只有七天,一个电脑城只有几种固定的品牌的电脑 enum 枚举类型名 标识符; #include<iostream> void ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,236
精华内容 15,694
关键字:

c++枚举型

c++ 订阅