关于c++枚举类型的声明

比如enumState={RUN,BLOCK,及其他……};现在希望另一个枚举类型MoreState包含State类型的所有值,在此基础上MoreState还可以取其他值... 比如enum State={RUN, BLOCK, 及其他……};
现在希望另一个枚举类型MoreState包含State类型的所有值,在此基础上MoreState还可以取其他值,应该怎样声明?
注意:不能有冗余。State中添加新的可选项时,MoreState不必修改也会加入这个选项
展开
 我来答
solotony
推荐于2017-09-08 · TA获得超过599个赞
知道小有建树答主
回答量:700
采纳率:0%
帮助的人:573万
展开全部
呵呵,理论上可以,不过你肯定搞不定。说说方法吧:

你需要一个宏,例如OPTION_MAGIC(x)

把所有选项定义在一个文件比如option_names.h中如下:
OPTION_MAGIC(RUN) = xxx,
...
OPTION_MAGIC(BLOCK) = xxx,

然后定义枚举:
#define OPTION_MAGIC(x) State_ ## x
enum State={

#include "option_names.h"
}
#undef OPTION_MAGIC

#define OPTION_MAGIC(x) MoreState_ ## x
enum MoreState={

#include "option_names.h"
}
#undef OPTION_MAGIC
追问
这里包含头文件相当于把里面的东西都放进来了(放到枚举类型里面)对吗?然后用完了就取消对应的define,这样就安全了。
追答
你理解了,试试吧
徐_小杨
2015-11-28 · TA获得超过120个赞
知道小有建树答主
回答量:84
采纳率:0%
帮助的人:60.1万
展开全部
1. 枚举的定义枚举类型定义的一般形式为:   enum 枚举名{ 枚举值表 };   在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。   例如:   该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday类型变量的取值只能是七天中的某一天。   2. 枚举变量的说明   如同结构和联合一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或直接说明。   设有变量a,b,c被说明为上述的weekday,可采用下述任一种方式:   enum weekday{ sun,mon,tue,wed,thu,fri,sat };   enum weekday a,b,c;   或者为:   enum weekday{ sun,mon,tue,wed,thu,fri,sat }a,b,c;   或者为:   enum { sun,mon,tue,wed,thu,fri,sat }a,b,c;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
One_More_2013
2014-07-10 · TA获得超过682个赞
知道小有建树答主
回答量:1028
采纳率:50%
帮助的人:290万
展开全部
这个枚举,继承方式,我去找找例子。
枚举应该不能这样使用,因为枚举本来就是一个固定的常量数组,也就是说是一个非常确定的数据的情况下,才用枚举的。
再说,即使按你说的能实现,但是枚举里面的常量都是固定值,你在State里面继续添加了元素,那么就会相对的改变MoreState里面的数值,这样就会影响MoreState已经实现的相关计算。如果State里面继续添加了N个元素,那么MoreState里面的值就都会相应的增加N,显然这样的方式是不对的。

你还是用类来实现吧。类能很简单就能实现。
class State{
const int RUN=0;
const int BLOCK=1;
...

然后MoreState集成State类。
追问
我希望自动指定常量值,所以才用枚举。真没办法了吗?
追答
自动指定常量值,你说的是什么意思,就是MoreState里面除了State的元素,之后的元素再State的基础上,继续按顺序加1吗? 如果是这样用类也是能实现的,(sizeof(State)/sizeof(int))用这个表达式确定State里面有多少元素,然后将MoreState里面添加的元素加上这个(sizeof(State)/sizeof(int))表达式的数值就好。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e43033c
推荐于2017-09-03 · TA获得超过1130个赞
知道小有建树答主
回答量:933
采纳率:100%
帮助的人:935万
展开全部
enum weekday{sun,mon,tue,wed,thu,fri,sat};
则可以定义 weekday first; first即为代表星期的变量
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
假简简单单
2014-07-10
知道答主
回答量:3
采纳率:0%
帮助的人:4365
展开全部
用类可以实现
#include "stdafx.h"
#include <iostream>
using namespace std;

struct A
{
static const int a = 0;
static const int b = 1;
};

struct B : public A
{
static const int c = 2;
static const int d = 3;
};

int _tmain(int argc, _TCHAR* argv[])
{
cout << B::a << endl;
cout << B::b << endl;
cout << B::c << endl;
cout << B::d << endl;
return 0;
}

如果需要自动指定常量值的话

B::a = 100;
B::b = 200;
B::c = 20;
B::d = 30;

或者:
A::a = 1000;
A::b = 2000;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式