对于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 1
和enum 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);
就是强转。