c++//如何实现下面c语言的枚举?
voidmove(void*object,enumSPEEDs);这个函数的第一个参数是要移动的对象的指针,比如是我们的游戏玩家玛丽奥第二个参数是移动的速度。我们知道在超...
void move(void* object,enum SPEED s);
这个函数的第一个参数是要移动的对象的指针,比如是我们的游戏玩家玛丽奥
第二个参数是移动的速度。
我们知道在超级玛丽这款游戏中,速度只有两种,走/跑。
那么针对这两种情况我们就可以穷尽出他们并且放到一个枚举类型中:
结构体的声明就是
enum SPEED{
WALK,
RUN
}
那么其实呢,WALK=0,RUN=1。我们相当于给这两个整数值取了一个有意义的名字。
当我们需要玛丽奥走时我们就
move(&matrio,WALK);
我们需要玛丽奥跑时我们就
move(&matrio,RUN);
当然这两句在c中可以用move(&matrio,0)和move(&matrio,1)代替。在C++中如果这样写会给予警告。 展开
这个函数的第一个参数是要移动的对象的指针,比如是我们的游戏玩家玛丽奥
第二个参数是移动的速度。
我们知道在超级玛丽这款游戏中,速度只有两种,走/跑。
那么针对这两种情况我们就可以穷尽出他们并且放到一个枚举类型中:
结构体的声明就是
enum SPEED{
WALK,
RUN
}
那么其实呢,WALK=0,RUN=1。我们相当于给这两个整数值取了一个有意义的名字。
当我们需要玛丽奥走时我们就
move(&matrio,WALK);
我们需要玛丽奥跑时我们就
move(&matrio,RUN);
当然这两句在c中可以用move(&matrio,0)和move(&matrio,1)代替。在C++中如果这样写会给予警告。 展开
3个回答
展开全部
枚举实际上相当于整型常量。如果语言不支持枚举,可以这样。如:
typedef const int SPEED;
const int WALK=0;
const int RUN=1;
但是,C++是兼容C的。所以你可以用枚举。之所以用0、1会有警告,是因为C++的类型检查要严格一些。你写WALK的话它知道这是enum SPEED类型了,你写0、1的话他就认为这是普通的整型了,所以会提示警告让你转换类型。
既然你用了枚举,就彻底用枚举,不要一会用WALK,一会用0,不要因为懒得多敲3个字母就用0.
typedef const int SPEED;
const int WALK=0;
const int RUN=1;
但是,C++是兼容C的。所以你可以用枚举。之所以用0、1会有警告,是因为C++的类型检查要严格一些。你写WALK的话它知道这是enum SPEED类型了,你写0、1的话他就认为这是普通的整型了,所以会提示警告让你转换类型。
既然你用了枚举,就彻底用枚举,不要一会用WALK,一会用0,不要因为懒得多敲3个字母就用0.
更多追问追答
追问
0 1只能表示2个情况,三种以上 有什么表示?
追答
继续添加被。比如:
const int STOP=0;
const int WALK=1;
const int RUN=2;
当然,如果是支持枚举的语言(C、C++都支持枚举),可以直接用枚举。如:
typedef enum{
STOP,
WALK,
RUN,
}SPEED;
展开全部
c和c++都有枚举呀,照用就行
枚举就是便如阅读,便于修改
0、1、2这些称为魔数(magic number)
枚举就是便如阅读,便于修改
0、1、2这些称为魔数(magic number)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是编译器故意给出的警告,并不是错误。目的是提醒程序注意此处传参是否正确。
程序中如果大量使用0、1来替代相应的枚举量或常量,将会导致程序难以阅读,且会造成其他的隐患。例如SPEED将来在WALK和RUN之间插入了一个新的状态,程序中的0、1就不再代表WALK和RUN了,这样的错误一般很难查找出来,所以编译器通过警告来推荐程序员使用WALK、RUN等枚举名传参。
程序中如果大量使用0、1来替代相应的枚举量或常量,将会导致程序难以阅读,且会造成其他的隐患。例如SPEED将来在WALK和RUN之间插入了一个新的状态,程序中的0、1就不再代表WALK和RUN了,这样的错误一般很难查找出来,所以编译器通过警告来推荐程序员使用WALK、RUN等枚举名传参。
更多追问追答
追问
插入了一个新的状态//能举个例子吗
追答
例如本来定义为
enum SPEED{
WALK,
RUN
}
在日后程序维护的时候,由于需要变成了
enum SPEED{
STOP,
WALK,
RUN
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询