关于c++枚举类型的声明
比如enumState={RUN,BLOCK,及其他……};现在希望另一个枚举类型MoreState包含State类型的所有值,在此基础上MoreState还可以取其他值...
比如enum State={RUN, BLOCK, 及其他……};
现在希望另一个枚举类型MoreState包含State类型的所有值,在此基础上MoreState还可以取其他值,应该怎样声明?
注意:不能有冗余。State中添加新的可选项时,MoreState不必修改也会加入这个选项 展开
现在希望另一个枚举类型MoreState包含State类型的所有值,在此基础上MoreState还可以取其他值,应该怎样声明?
注意:不能有冗余。State中添加新的可选项时,MoreState不必修改也会加入这个选项 展开
6个回答
展开全部
呵呵,理论上可以,不过你肯定搞不定。说说方法吧:
你需要一个宏,例如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
你需要一个宏,例如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,这样就安全了。
追答
你理解了,试试吧
展开全部
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;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个枚举,继承方式,我去找找例子。
枚举应该不能这样使用,因为枚举本来就是一个固定的常量数组,也就是说是一个非常确定的数据的情况下,才用枚举的。
再说,即使按你说的能实现,但是枚举里面的常量都是固定值,你在State里面继续添加了元素,那么就会相对的改变MoreState里面的数值,这样就会影响MoreState已经实现的相关计算。如果State里面继续添加了N个元素,那么MoreState里面的值就都会相应的增加N,显然这样的方式是不对的。
你还是用类来实现吧。类能很简单就能实现。
class State{
const int RUN=0;
const int BLOCK=1;
...
}
然后MoreState集成State类。
枚举应该不能这样使用,因为枚举本来就是一个固定的常量数组,也就是说是一个非常确定的数据的情况下,才用枚举的。
再说,即使按你说的能实现,但是枚举里面的常量都是固定值,你在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))表达式的数值就好。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
enum weekday{sun,mon,tue,wed,thu,fri,sat};
则可以定义 weekday first; first即为代表星期的变量
则可以定义 weekday first; first即为代表星期的变量
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用类可以实现
#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;
#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;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询