- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
深入解析enum
1 enum是一个关键词,我们可以把它和class放到一块理解
为什么可以放到一块理解呢?
①因为我们的enum也可以定义类型,和class一样。如:
Code:
enum?weekday{Monday,Tuesday};??
这里的weekday就是一种自定义类型。我们可以用这种类型来定义变量。
如:
Code:
weekday?day;??
我们用自定义类型定义了一个变量day。
②enum也有默认构造函数,拷贝构造函数,赋值函数。
我们的enum和类一样同样具有默认构造函数,拷贝构造函数,赋值函数。至于有没有析构函数我就不清楚了。:-)
甚至我们的enum在这方便比class还要强大,因为它可以自动生成有参构造函数,而我们的class只能为我们生成无参默认构造函数。
看个例子:
Code:
#include?iostream ??
using?namespace?std; ??
enum?weekday{Monday,Tuesday}; ??
int?main() ??
{ ??
????weekday?b?=?weekday();//调用默认构造函数,将b初始化为0 ??
????cout??b??endl; ??
????weekday?c(b);//调用拷贝构造函数 ??
????cout??c??endl; ??
????c?=?Tuesday; ??
????weekday?d?=?c;?//调用拷贝构造函数 ??
????cout??d??endl; ??
????weekday?e; ??
????e?=?d;?//调用赋值函数 ??
????cout??e??endl; ??
????return?0; ??
}??
?从这个例子我们可以清楚的看到enum中默认构造函数,拷贝构造函数,赋值函数的应用。怎么样很神奇吧。还有一个更神奇的呢。enum可以自动为我们生成有参的构造函数。这点class做不到的。:-)
Code:
weekday?f?=?weekday(5); ??
????cout??f??endl;??
看,这就是enum为我们生成的有参的构造函数的应用。呵呵。不错吧。
哈哈。enum和class有这么多相似的地方,甚至在有些地方比class还强大些,我们是否可以把它们放到一块理解了呢。呵呵。。
小结: enum 和 class都可以定义自定义类型。
2 enum 和 class的不同
认真的同学也许早发现了。enum中的默认构造函数不像class中的那样可以自动调用,它必须由我们显示的调用它。怎么调用从上面大家就可以看出来。那类中的那种方式呢?看:
Code:
weekday?a; ??
cout??a??endl;??
结果是未定义的。从这里我们就可以看出,默认的构造函数没有被调用。这点enum又有点靠近内置类型了。即:必须由我们显示的进行初始化,否则便是未定义的。那下面这个呢?
Code:
weekday?a(); ??
cout??a??endl;??
哇,开始很牛啊。。:-),好像是在调用默认构造函数似的。但编译器却不愿意了,它发出了抱怨。。我们第一行错了吗?没有。是第二行。哈哈,奇怪吧。。其实编译器这里并没有把a当成一个变量来看,而是把它当成了一个函数了。奇怪不。。我们看个例子:
Code:
#include?iostream ??
using?namespace?std; ??
enum?weekday{Monday,Tuesday}; ??
weekday?a(); ??
int?main() ??
{ ??
?????a(); ??
} ??
weekday?a() ??
{ ??
????cout??hello??endl; ??
????return?Monday; ??
}??
运行下这个函数,大家就清楚了。。:-)
对于拷贝构造函数,赋值函数的使用enum和类是一样的。然而,类中可以由用户自定义函数,enum可以吗?哇。。
这个就不清楚啦。。我试着在enum里定义函数。编译器却对我火冒三丈。。我怕了。。若你和编译器的关系好,它让你定义了,千万别忘了通知我一声哈。。O(∩_∩)O哈哈~
3 看一下enum的定义
说了老半天了,还没解释enum的定义呢。。罪过罪过。。若那位哥们等烦了,千万
Code:
enum?weekday{Monday,Tuesday};??
我们来看下这个定义。
一般格式 enum + 类型名?+?{ 常量名(可为多个)} +?;
其中类型名可以不要。常量名也可以不要(这时候就没啥具体意义了哈)。
enum定义出来的类型具体是什么类型呢?我们可以看下:
Code:
week
文档评论(0)