直奔主题,什么是枚举类型,就是说又重新命名的整型类型,什么意思呢,其实在MFC中定义了很多的这样的类型,比如说 HWND 句柄类型,你可以直接查看这个自定义数据类型的原始类型,为什么要这样做的,关键是容易理解,使程序有可读性,其实枚举的目的也是这个目的,用现在网上流行的例子你就可以看出的,比如说一周的星期SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,
SATURDAY,
用枚举定义 如下
Enum TestEnum{ MONDAY=1, TUESDAY=2, WEDNESDAY=3, THURSDAY=4, FRIDAY=5,
SATURDAY=6,SUNDAY=7}.//这里如果你不初始化的话,默认的值分别为0,1,2,3,4,5,6,默认初始值是以0为索引的,一次递增1,如果前面初始化了值,后面的变量没有初始化,那么后面的值将会根据前面的值自动赋值为增1,这点很重要
TestEnum代表的是枚举名 主要这里试试声明一个枚举类型,其实这个TestEnum 就是一个数据类性,这个类型就叫做枚举类型,我们还的什么这个枚举类型的变量
TestEnum Test;当然了这个枚举变量,赋值的时候必须是声明中的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
枚举类型的值一般都是整型的,为什么呢,从网上的资料可以看出,枚举类型和switch一起,然而switch中用到的表达式一般都是整型的, 看下面代码
test=MONDAY; //给成员赋值
switch(test)
{
case MONDAY :
AfxMessageBox("星期一");
break;
case TUESDAY :
AfxMessageBox("星期二");
break;
case WEDNESDAY :
AfxMessageBox("星期三");
break;
case THURSDAY:
AfxMessageBox("星期四");
break;
case FRIDAY:
AfxMessageBox("星期五");
break;
case SATURDAY:
AfxMessageBox("星期六");
break;
case SUNDAY:
AfxMessageBox("星期日");
break;
default:
break;
}
记住一点,这里给赋值的时候必须是声明中的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
如果你把Test=1的话 虽然都是整型,但是编译的时候出现错误,你可以自己试试,可能你会说我直接用下面的代码不行吗
Int i=1;
switch(i)
{
case 1 :
AfxMessageBox("星期一");
break;
case 2 :
AfxMessageBox("星期二");
break;
case 3 :
AfxMessageBox("星期三");
break;
case 4:
AfxMessageBox("星期四");
break;
case 5:
AfxMessageBox("星期五");
break;
case 6:
AfxMessageBox("星期六");
break;
case 7:
AfxMessageBox("星期日");
break;
default:
break;
}
其实这样也是可以的,但是枚举类型的目的就是让程序更容易懂,你可以看看这个代码和用枚举代码的程序相对比一下,
本来我想看看这个类型在结构中是怎么存放的呢,但是我跟踪了一下还是没有看到这个定义的类型是怎么存放的,但是用用sizeof(test)查看的时候返回4个字节,难道这个枚举类型也是Union 一样只能存放一个变量?!!有知道的请告诉我
作者 要饭的
来源:https://www.cnblogs.com/VCdog/archive/2010/05/13/1734459.html