现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

C++枚举类型

2012-08-03 23:13 工业·编程 ⁄ 共 1665字 ⁄ 字号 暂无评论

如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。

之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。 
举个例子来说明一吧,为了让大家更明白一点,比如一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔,这里有两种可能,那么你就可以定义一个枚举类型来表示它!

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的定义赋值操作!

前面说了那么多,下面给出一个完整的例子大家可以通过以下的代码的学习进行更完整的学习!

#include <iostream> 
using namespace std; 
void main(void) 

enum egg {a,b,c}; 
enum egg test; //在这里你可以简写成egg test; 
     test = c; //对枚举变量test进行赋予元素操作,这里之所以叫赋元素操作不叫赋值操作就是为了让大家明白枚举变量是不能直接赋予算数值的,例如(test=1;)这样的操作都是不被编译器所接受的,正确的方式是先进行强制类型转换例如(test = (enum egg) 0;) 这是c风格,c++风格用 test = (egg) 0;! 
if (test==c) 
     { 
cout <<"枚举变量判断:test枚举对应的枚举元素是c" << endl; 
     } 
if (test==2) 
     { 
cout <<"枚举变量判断:test枚举元素的值是2" << endl; 
     } 
cout << a << "|" << b << "|" << test <<endl; 
     test = (enum egg) 0; //强制类型转换  test = (egg)0;
cout << "枚举变量test值改变为:" << test <<endl; 
cin.get(); 
}

看到这里要最后说一个问题,就是枚举变量中的枚举元素(或者叫枚举常量)在特殊情况下是会被自动提升为算术类型的!

#include <iostream> 
using namespace std; 
void main(void) 

enum test {a,b}; 
int c = 1+b; //自动提升为算术类型 
cout << c <<endl; 
cin.get(); 
}

注意:

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

enum FileAccess {
    Read = 0x1,
    Write = 0x2,
};

FileAccess access = ::Read; // 正确 

如果这个类型声明在class Base中,则Base::Read;
FileAccess access = FileAccess::Read; // 错误

C++枚举的这个特点对于习惯面向对象和作用域概念的人来说是不可接受的。

给我留言

留言无头像?