如果不用enum,用define一般情况也可以实现,那为什么还要enum呢?
举一个简单的例子:比如有一个变量是代表星期几,在程序当中要根据这个变量进行某种操作,如果用define的话代码如下:
#include<bits/stdc++.h>
using namespace std;
#define Monday 1
#define Tuesday 2
#define Wednesday 3
#define Thursday 4
#define Friday 5
#define Saturday 6
#define Sunday 7
int main()
{
int week=Wednesday;
switch(week)
{
case Monday:cout<<"Today is Monday"<<endl;break;
case Tuesday:cout<<"Today is Tuesday"<<endl;break;
case Wednesday:cout<<"Today is Wednesday"<<endl;break;
case Thursday:cout<<"Today is Thursday"<<endl;break;
case Friday:cout<<"Today is Friday"<<endl;break;
case Saturday:cout<<"Today is Saturday"<<endl;break;
case Sunday:cout<<"Today is Sunday"<<endl;break;
default:cout<<"WRONG!"<<endl;break;
}
return 0;
}
看上去好像也是可以解决问题的,但是在一个大工程中,这样的代码很不美观。而且week
是int
类型的变量,含义很不明确。对于星期几而言,一共就 7 个情况,那么问题不是很大,但是对于有一些变量,比如说颜色、类别、错误信息等,不确定个数,甚至会经常增加和删除,如果一直通过define来修改,很容易出错,时间长了之后也很难维护。
来看看用enum的效果
#include<bits/stdc++.h>
using namespace std;
enum Weekday{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};
int main()
{
Weekday week=Wednesday;
switch(week)
{
case Monday:cout<<"Today is Monday"<<endl;break;
case Tuesday:cout<<"Today is Tuesday"<<endl;break;
case Wednesday:cout<<"Today is Wednesday"<<endl;break;
case Thursday:cout<<"Today is Thursday"<<endl;break;
case Friday:cout<<"Today is Friday"<<endl;break;
case Saturday:cout<<"Today is Saturday"<<endl;break;
case Sunday:cout<<"Today is Sunday"<<endl;break;
default:cout<<"WRONG!"<<endl;break;
}
return 0;
}
注意现在week
是Weekday
这个 枚举类型 ,就不需要用不同的数字
来定义不同的宏
来代表不同的类别
。