C++ enum剖析
2011-05-31 19:55 x_feng 阅读(704) 评论(0) 收藏 举报枚举的定义要用到关键字enum,就像类的定义用class,结构体用struct一样,enum和struct、class都是用户自定义类型,只不过枚举的内容比较简单,也不常用。如下:
class myClass//类名
{
}mc;//类对象
struct myStruct//结构体名
{
}ms;//结构体对象
enum myEnum//枚举名
{
//标识符 = 整型常数
}me;//枚举对象。可以没有枚举名和枚举变量
1.枚举定义
enum open {in, out, app}openfile;
默认第一个枚举成员赋值为0,即in = 0,后面的每个枚举成员赋的值比前面的大1。也可以显式赋值,如:
enum open {in, out = 2, app}openfile;
则in还是0,而app的值就是前面的加1了,app = 3。
*这里要注意,枚举成员是常量,我们可以为一个或多个枚举成员提供初始值,用来初始化枚举成员的值必须是一个常量表达式。可以用枚举成员确定数组维数:
enum open {in, out = 2, app}openfile;
int a[app];//相当于定义数组 int a[3],可以确定枚举成员是常量,在编译时就确定了值
2.枚举赋值
C++Primer曰:每个enum都定义一种唯一的类型。
其实就像class myClass{};一样,myClass是一种自定义的一种新的类型。但是,枚举类型的对象的初始化或赋值,只能通过其枚举成员或同一枚举类型的其他对象来进行。
enum open {in, out = 2, app}openfile;
enum open openfile2 = openfile;//同类型
open openfile3 = out;//枚举成员
open openfile4 = 3;//错误
当然也可以改变枚举变量的值,需要类型转换。
open openfile4 = 3;//错误,改变如下 open openfile4 = (open)4;//正确
*更改枚举对象的值,并不影响枚举成员的值。
enum open {in, out = 2, app}openfile;//int = 0,out = 2,app = 3
openfile = (open)5;
cout<<in<<out<<app;//结果依然为023
3.枚举构造
感觉枚举是蛮奇怪的东西,当然也很简单。
enum obj{shape = 1, sphere, cylinger}objj;
enum obj obj1 = obj();//默认构造函数
cout<<obj1<<endll;//结果为0
enum obj obj2 = obj(6);//带参数的构造函数,当然这也是对象赋值的一种方法
cout<<obj2<<endl;//结果为6
4.枚举内存
本来想写一点,但是发现别人写的比我更完美,大家详见:http://www.cppblog.com/chemz/archive/2007/06/05/25578.html
*注意命名空间的冲突
*sizeof(enum)不一定非要是4
*enum的对象值,有可能被改变,注意判断边界约束
*…你有什么好的发现吗?烦请告知。
浙公网安备 33010602011771号