enum 在c++中的使用

枚举类型,顾名思义,“枚”作为量词,作“个”讲,那么枚举,就是一个一个的列举,如果一件事情能够被一个一个的列举,那么它的数量肯定就是有限的,否则是不能被一一列举出来的。所以枚举类型即为能被列举的常量的一个集合。

在生活中,枚举的例子随处可见,比如礼拜几,那么就可以作为一个枚举变量。这个变量所存储的值,是有限的,且,能被我们所列举。再比较说,性别。它也可以作为一个枚举类型,我们知道,性别也就只有“男”或者“女”,它是可以被我们所列举的。它能很直观的表达出我们所定义的事件。

如:定义一个枚举类型的变量,虽然不知道变量具体是什么值,但能知道它可能会有哪些值,这样,这样,就能对程序中所出现的变量的取值有一个很好的估量,从而使程序的编写更加顺利。

枚举类型的定义写结构体的定义相似,其形式为:

enum 枚举名{

标识符[=整型常数],

标识符[=整型常数],

...

标识符[=整型常数],

} 枚举变量;

如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始,

依次

次赋给标识符0, 1, 2, ...。但当枚举中的某个成员赋值后, 其后的成员按依次

加1的规则确定其值。

例如下列枚举说明后, x1, x2, x3, x4的值分别为0, 1, 2, 3。

enum string{x1, x2, x3, x4}x;

当定义改变成:

enum string

{

x1,

x2=0,

x3=50,

x4,

}x;

则x1=0, x2=0, x3=50, x4=51

注意:

1. 枚举中每个成员(标识符)结束符是",",

不是";", 最后一个成员可省略

","。

2. 初始化时可以赋负数, 以后的标识符仍依次加1。

3. 枚举变量只能取枚举说明结构中的某个标识符常量。

例如:

enum string

{

x1=5,

x2,

x3,

x4,

};

enum strig x=x3;

此时, 枚举变量x实际上是7。

4.在外部,我们可以对枚举变量进行赋值,不过,得要进行类型转换。

如果我们不进行类型轮换,即如下所示进行赋值:

x = 3;

是不允许是,如果对X进行赋值,只能对3进行类型转换.即:

x = (string)3;

那么这样就对了.

如果给x赋的不是一个整形的数,而是一个字符型的,如:

x = (string)’a’;

那么这时候x的值并不是字符’a’,而是’a’的ASCII码,我们知道,在枚举类型中,各常量的值只能是整形的,所以在对上例会自动的将’a’转换成一个整数值.从内存的角度来看来话,其实C/C++中整形和字符型的变量是一样的,它们之间可以互相转换.

下面是一个使用枚举类型的例子.

#include <iostream>

using namespace std;

enum Day {Saturday, Sunday = 0, Monday, Tuesday, Wednesday,

Thursday, Friday}; //Saturday = 0 by default, Sunday = 0 as well

void Prnt (Day day)  // Print whether a day is a ‘Weekend‘ or a "Weekday".

{

if (day ==0) cout << "Weekend" << endl;

else cout << "Weekday" << endl;

}

int main(){

enum Fruit {apple, pear, orange, banana} frt1; // ‘frt1‘ can be declarated here.

// int apple; // error: redefinition of ‘apple‘

typedef enum Fruit ShuiGuo; // In c++, ‘enum‘ can be omitted.

enum Fruit frt2 = apple; // In c++, ‘enum‘ can be omitted.

ShuiGuo frt3 = pear; // After type-declaration synonym, ‘enum‘ can not exist here!

frt1 = (Fruit) 0; // ‘frt1‘ can be assigned with number by explicit cast.

for (int i = apple; i <= banana; i++)

switch (i)

{

case apple: cout << "apple" << endl; break;

case pear: cout << "pear" << endl; break;

case orange: cout << "orange" << endl; break;

case banana: cout << "banana" << endl; break;

default: break;

}

// Print whether a day is a ‘Weekend‘ or a "Weekday".

Prnt (Saturday);

Prnt (Sunday);

Prnt (Monday);

Prnt (Tuesday);

Prnt (Wednesday);

Prnt (Thursday);

Prnt (Friday);

return 0;

}

时间: 2024-11-05 21:37:49

enum 在c++中的使用的相关文章

enum 在c中的使用

假设一个变量你须要几种可能存在的值,那么就能够被定义成为枚举类型.之所以叫枚举就是说将变量或者叫对象可能存在的情况也能够说是可能的值一一例举出来. 举个样例来说明一吧,为了让大家更明确一点,比方一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔,这里有两种可能,那么你就能够定义一个枚举类型来表示它! enum box{pencil,pen};//这里你就定义了一个枚举类型的变量叫box,这个枚举变量内含有两个元素也称枚举元素在这里是pencil和pen,分别表示铅

正确的使用枚举(Enum)

状态与选项的区别(states and options) 在用enum之前,我个人觉得,区分一下状态和选项的概念还是很必要的. 状态,同时只能有一种,如“OK”,“Error”,不可能同时是OK和Error.选项,同时可以有一种或一种以上,如App可以同时支持横屏和竖屏,横屏竖屏在这个时候就是“屏幕方向”的两种不同的选项. 接下来,我们看看如何用枚举定义状态和选项. enum与状态(states) typedef enum _TTGState { TTGStateOK = 0, TTGState

Java Enum类语法和用法解析

一.语法 1. Enum的全称为enumeration,中文俗称枚举类,学过C/C++等语言的人,应该都对它略知一二. 但在Java语言规范中,是在JDK 5版本中才引入的,存放在 java.lang 包中.在Java版的Enum实质是语法糖,其声明方式如下: 1 package felix.fu 2 public enum Color{ 3 RED, 4 BLUE, 5 BLACK, 6 YELLOW, 7 GREEN 8 } enum是用来声明枚举的关键字,声明定义的类都隐含继承了一个父类(

位标记与Flags特性结合枚举在Unity中的使用小记

位标记与Flags特性结合枚举中的使用小记 enum在应用中往往用来标记一些我们需要的类似开关功能的效果,enum默认的初始化值是根据以下形式赋值的.如下图: 图-1 而且在是用enum来标记位时往往用十六进制而不是十进制,因为十进制的相关性要比十六进制强很多.早在C#4.0以前,要确定一个特定的位是否被设置,是对标志字与该位标志是用位与运算符,如: bool useRed = (ops & Colors.Red) == Colors.Red; C#4.0引入了HasFlag方法用来检测多个标记

sql点滴42—mysql中的数据结构

MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段中的值是否有正负之分或者用零填补. 表列出了各种数值类型以及它们的允许范围和占用的内存空间. 类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1 字节 (-128,127) (0,255) 小整数值 SMALLINT 2 字节 (-32 768,32 767) (0,65 535)

Java枚举类型enum

枚举的语法 1.Enum的全称为enumeration,中文俗称枚举类,学过C/C++等语言的人,应该都对它略知一二. 但在Java语言规范中,是在JDK 5版本中才引入的,存放在 java.lang 包中.在Java版的Enum实质是语法糖,其声明方式如下: [代码1] package com.enumtest; public enum Color { RED,BLUE,BLACK,YELLOW,GREEN //注意这里可以没有分号 } enum是用来声明枚举的关键字,声明定义的类都隐含继承了

swift 用在声明中的关键字

1 ///////////////用在声明中的关键字///////////////// 2 3 //1.class声明一个类 4 public class aClass { 5 //.class声明一个类函数 6 public class func test(let num:Int) ->Void{ 7 8 } 9 } 10 11 //2.deinit反初始化 12  deinit{} 13 14 15 //3.枚举 16 public enum UIButtonType : Int { 17

Enum、EnumMap、EnumSet的用法讲解

今天在工作中遇到这样一个问题,要在前台页面上渲染出来所有的枚举元素,但是前台页面用的是Velocity,所以需要把枚举元素放到Map里,然后在前台进行渲染.这里不能一个一个的取出枚举元素来put的,就想能用一个循环能搞定这个.发现枚举类有一个方法values,正好可以满足我的需求.OK话不多说我们一个一个的介绍其中主要的方法. 先看定义的枚举类: package com.zkn.newlearn.enums; /** * * @author zkn 2016-07-11 * */ public

状态模式在领域驱动设计中的使用(Using the State pattern in a Domain Driven Design)

领域驱动设计是软件开发的一种方式,问题复杂的地方通过将具体实现和一个不断改进的核心业务概念的模型连接解决.这个概念是Eric Evans提出的,http://www.domaindrivendesign.org/这个网站来促进领域驱动设计的使用.关于领域驱动设计的定义,http://dddcommunity.org/resources/ddd_terms/,这个网站有很多的描述,DDD是一种软件开发的方式: 1.      对于大多数的软件项目,主要的精力应该在领域和领域的逻辑. 2.