VCdog(狗)编程网

vc狗编程网希望你喜欢

博客园 首页 新随笔 联系 订阅 管理

直奔主题,什么是枚举类型,就是说又重新命名的整型类型,什么意思呢,其实在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 一样只能存放一个变量?!!有知道的请告诉我

     作者  要饭的