您的位置:

php枚举类型enum用法,php 枚举

本文目录一览:

枚举类型enum用法

enum是用来声明枚举类型数据。

它可以像数组一样存储许多的元素,但是不同于数组的是,它除了数字不能存储以外,其他类型的如字母、特殊符号、汉字都可以以任意组合存入enum当中去。

enum的声明:enum A { a, b, c };

enum声明不同于数组,其只可以声明在Main()方法体外,在Main()中可以被调用。

enum的枚举数值默认是从0开始的,但是也可以强制元素序列进行改变。enum A {a=1, b, c};这样就可以实现了。

enum可以通过枚举名加点通过枚举的元素访问枚举数值。例:

int i = (int)A.a;枚举值虽然是int类型的,但是也必须进行显示的强制转换。

同样enum也可以通过枚举数值来访问枚举内的各个元素。方法是:Console.WriteLine( " (A)1 " );这样就可以访问enum内的各个元素。

enum怎么用?

一个enum是定义一组值的对象,它可以包括零个或多个值成员。只须定义一个enum型的对象.enum对象的值都会自动获得一个数字值,从0开始,依次递增。如:

EnumDemo.java

package net.javagarage.enums;

public class EnumDemo{

private enum Seasons{

winter,spring,summer,fall

public static void main(String[]args){

for(Seasons s:Seasons.values()){

System.out.println(s);

尽管enums有这么多的属性,但并不是用的越多越好,如果那样还不如直接用类来的直接.enums的优势在定义int最终变量仅当这些值有一定特殊含义时.但是如果需要的是一个类,就定义一个类,而不是enum。

扩展资料:

枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。如在weekday中,sun值为0,mon值为1,sat值为6。

只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如一定要把数值赋予枚举变量,则必须用强制类型转换。

ENUM的赋值和使用

枚举类型在使用中有以下规定:

1. 枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。

2. 枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。如在weekday中,sun值为0,mon值为1,sat值为6。

只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如一定要把数值赋予枚举变量,则必须用强制类型转换。

如: a=(enum weekday)2;特别注意:在VS2010等编译器中,强制转换格式应为:(weekday)2,如果前面加上了enum,编译时会出现“类型重定义”的错误。

其意义是将顺序号为2的枚举元素赋予枚举变量a,相当于: a=tue;还应该说明的是枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号。 输出结果:1 monday 2 tuesday 3 wendsday 4 thursday 5 friday6 saturday 7 sunday 8 monday 9 tuesday 10 wendsday11 thursday 12 friday 13 saturday 14 sunday 15 monday16 tuesday 17 wendsday 18 thursday 19 friday 20 saturday21 sunday 22 monday 23 tuesday 24 wendsday 25 thursday26 friday 27 saturday 28 sunday 29 monday 30 tuesday3. 如果枚举值与一些关键字冲突,例如: enum course{begin,then,end};由于程序有可能使用了iostream,并且使用了命名空间std,这时如果直接使用end进行赋值就有可能出现“不明确”符号的错误。解决此问题,有两个方法:

(1)定义枚举值时应避免使用常用关键字,可以加前缀进行区分

例如: enum course{e_begin,e_then,e_end};(2)可以在枚举值前面加入枚举类型:course::end

枚举类型的用法?

C/C++中枚举类型(enum)

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

在这里要说一下,如果你想定义两个具有同样特性枚举类型的变量那么你可以用如下的两种方式进行定义! enum box{pencil,pen}; enum box box2;//或者简写成box box2;

再有一种就是在声明的时候同时定义。 enum {pencil,pen}box,box2; //在声明的同时进行定义!

枚举变量中的枚举元素系统是按照常量来处理的,故叫枚举常量,他们是不能进行普通的算术赋值的,(pencil=1;)这样的写发是错误的,但是你可以在声明的时候进行赋值操作! enum box{pencil=1,pen=2};

但是这里要特别注意的一点是,如果你不进行元素赋值操作那么元素将会被系统自动从0开始自动递增的进行赋值操作,说到自动赋值,如果你只定义了第一个那么系统将对下一个元素进行前一个元素的值加1操作,例如 enum box{pencil=3,pen};//这里pen就是4系统将自动进行pen=4的定义赋值操作!

C++ 中的枚举类型继承于 C 语言。就像其他从 C 语言继承过来的很多特性一样,C++ 枚举也有缺点,这其中最显著的莫过于作用域问题——在枚举类型中定义的常量,属于定义枚举的作用域,而不属于这个枚举类型。例如下面的示例:enum FileAccess {

Read = 0x1,

Write = 0x2,

};FileAccess access = ::Read; // 正确

FileAccess access = FileAccess::Read; // 错误C++枚举的这个特点对于习惯面向对象和作用域概念的人来说是不可接受的。首先,FileAccess::Read 显然更加符合程序员的直觉,因为上面的枚举定义理应等价于如下的定义(实际上,.NET 中的枚举类型便是如此实现的):class FileAccess {

static const int Read = 0x1;

static const int Write = 0x2;

};其次,这导致我们无法在同一个作用域中定义两个同样名称的枚举值。也就是说,以下的代码是编译错误:enum FileAccess {

Read = 0x1,

Write = 0x2,

};enum FileShare {

Read = 0x1, // 重定义

Write = 0x2, // 重定义

};如果这一点没有让你恼怒过的话,你可能还没写过多少 C++ 代码 :-)。实际上,在最新的 C++0x 标准草案中有关于枚举作用域问题的提案,但最终的解决方案会是怎样的就无法未卜先知了,毕竟对于象 C++ 这样使用广泛的语言来说,任何特性的增删和修改都必须十分小心谨慎。当然,我们可以使用一些迂回的方法来解决这个问题(C++ 总是能给我们很多惊喜和意外)。例如,我们可以把枚举值放在一个结构里,并使用运算符重载来逼近枚举的特性:struct FileAccess {

enum __Enum {

Read = 0x1,

Write = 0x2

};

__Enum _value; // 枚举值 FileAccess(int value = 0) : _value((__Enum)value) {}

FileAccess operator=(int value) {

this-_value = (__Enum)value;

return *this;

}

operator int() const {

return this-_value;

}

};我们现在可以按照希望的方式使用这个枚举类型:FileAccess access = FileAccess::Read;并且,因为我们提供了到 int 类型的转换运算符,因此在需要 int 的地方都可以使用它,例如 switch 语句:switch (access) {

case FileAccess::Read:

break;

case FileAccess::Write:

break;

}当然我们不愿意每次都手工编写这样的结构。通过使用宏,我们可以很容易做到这一点:#define DECLARE_ENUM(E) \

struct E \

{ \

public: \

E(int value = 0) : _value((__Enum)value) { \

} \

E operator=(int value) { \

this-_value = (__Enum)value; \

return *this; \

} \

operator int() const { \

return this-_value; \

} \

\

enum __Enum {#define END_ENUM() \

}; \

\

private: \

__Enum _value; \

};我们现在可以按如下的方式定义前面的枚举,并且不比直接写 enum 复杂多少。DECLARE_ENUM(FileAccess)

Read = 0x1,

Write = 0x2,

END_ENUM()DECLARE_ENUM(FileShare)

Read = 0x1,

Write = 0x2,

END_ENUM()