C/C++_log2000_typedef和enum

对于C++中tyoedef和enum的再熟悉

是的,log2000计划并不是每天写很高深的代码,有时候基础更重要
废话不多说

#include <iostream>
using namespace std;

typedef int this_is_INT;
enum aweek{mon=1,tue,wed,thu,fri,sat,sun};

int main(int argc, char *argv[])
{
    this_is_INT a=1;
    cout<<"typedef int a="<<a<<endl;
    aweek weekday;//declare method 1
    enum aweek godbless=sun;//declare method 2
    cout<<"enum 'aweek' is as followed:"<<endl;
    for(int today=mon;today<=sun;today++){
        weekday=aweek(today);
        if(today==sun) cout<<today<<":"<<"take the day off!"<<endl;
        else{
            cout<<today<<":"<<"working!"<<endl;
            if(today==mon) cout<<sun-mon<<" days to go!"<<endl;
            if(today==tue) cout<<sun-tue<<" days to go!"<<endl;
            if(today==wed) cout<<sun-wed<<" days to go!"<<endl;
            if(today==thu) cout<<sun-thu<<" days to go!"<<endl;
            if(today==fri) cout<<sun-fri<<" days to go!"<<endl;
            if(today==sat) cout<<sun-sat<<" days to go!"<<endl;
        }
    }
    return 0;
}

平台:ubuntu 14.04 64bit
IDE: QT5.8.0 64bit
程序输出:

Starting /home/~/build-2-1-Desktop_Qt_5_8_0_GCC_64bit-Debug/2-1...
typedef int a=1
enum 'aweek' is as followed:
1:working!
6 days to go!
2:working!
5 days to go!
3:working!
4 days to go!
4:working!
3 days to go!
5:working!
2 days to go!
6:working!
1 days to go!
7:take the day off!
/home/~/build-2-1-Desktop_Qt_5_8_0_GCC_64bit-Debug/2-1 exited with code 0

笔记:
1. 一个typedef语句中可以为已有的数据类型声明多个别名,如typedef int this_is_int,this_is_also_int;
对枚举元素按常量处理,不能对它们赋值,如刚才程序中若有sun=0;是非法的
枚举元素具有默认值,从0开始。如不想从0开始那应该显式说明出来,如上面的enum aweek{mon=1,
枚举值可以进行关系运算
aweek weekday;//declare method 1enum aweek godbless=sun;//declare method 2都可以用来声明enum类型,而且枚举类型的数据可以和整型数据相互转换(但不全是隐含转换),for循环中的int today=mon;就是枚举隐含转换为整形的例子,而today<=sun;也是隐含转换的例子。但整数值不可以直接赋值给枚举变量,如需要整数赋值给枚举变量,就需要显式强制类型转换

下面看一下直接赋值的结果,如果加入代码aweek eleven_day=11;,则会在编译时报错:

/home/~/main.cpp:13: error: invalid conversion from ‘int’ to ‘aweek’ [-fpermissive]
     aweek eleven_day=11;
                      ^

如果改为aweek eleven_day=(aweek)11;aweek eleven_day=static_cast<aweek> (11);则不会报错。for循环中的weekday=aweek(today);就是强转。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值