C++基础学习第三课(枚举类型)

第三课

案例:
enum WEEK {MON,TUE,WED,THI,FIR,SAT,SUN};
enum SHAPE {CIRCLE,RECT,LINE,POINT};
1,C语言中的enum

·允许非枚举值赋值给枚举类型,允许其他枚举类型的值赋值给另一个枚举类型;

enum WEEK today=1;//true
today=CIRCLE;//true

·枚举具有外层这作用域,容易造成名字冲突(在不同作用域不会冲突,但是会遵循就近原则,访问不到外层作用域的枚举);

enum OTHER {RECT};//error:"RECT",重定义
int RECT =999;//error:"RECT",重定义

·不同类型的枚举值可以直接比较

if(CIRCLE == MON)
{
    printf("666");
}
2,C++中的enum

·只允许赋值枚举值;

enum WEEK today =999l//error:无法从int转化为enum
todat=CIRCLE;//error //无法从enum:SHAPE转化为enum:WEEK

·枚举元素会暴露在外部作用域,不同两个枚举类型,若有相同枚举元素,则会发生冲突;

enum OTHER {RECT};//error RECT重定义
int RECT =999;//error重定义
OTHER::RECT;//true

·不同类型的枚举也可以直接比较

if(CIRCLE==MON)
{
    cout<<"999"<<endl;
}
3,C++中的enum class 强枚举类型
enum class WEEK {MON,TUE,WED,THI,FIR,SAT,SUN};
enum class SHAPE {CIRCLE,RECT,LINE,POINT};

·强枚举类型不会将枚举元素暴露在外部作用域,必须通过枚举名去访问;

cout<<SHAPE::RECT<<endl;//输出 1

·不相关的两个枚举类型不能直接比较;

if(SHAPE::CIRCLE==WEEK::MON)//error:类型不同不能直接比较
//可以通过强转解决
if(SHAPE::CIRCLE==(SHAPE)WEEK::MON)//true
4,总结

·C语言枚举类型支持不同类型枚举值之间赋值,以及数字赋值、比较,并且具有外层作用域;

·C++中枚举不允许不同类型的值赋值给枚举类型变量,但仍然支持不同类型比较,具有外层作用域;

·C++强枚举类型不允许不同类型之间赋值、比较,并且不具有外层作用域;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值