当前位置: 首页 > news >正文

旅游网站开发外文翻译宁波网站seo诊断工具

旅游网站开发外文翻译,宁波网站seo诊断工具,怎样在网上建网站做电商生意,杭州亚运会闭幕式The ChenPi 前言 今天我们要讲的是 C 中的枚举。 enum 是 enumeration 的缩写,基本上可以说,它就是一个数值集合。如果你想要给枚举一个更实际的定义,它们是给一个值命名的一种方法。 所以我们不用一堆叫做 A、B、C 的整数。我们可以有一个…

@The ChenPi

前言

今天我们要讲的是 C++ 中的枚举。

enum 是 enumeration 的缩写,基本上可以说,它就是一个数值集合。如果你想要给枚举一个更实际的定义,它们是给一个值命名的一种方法。

所以我们不用一堆叫做 A、B、C 的整数。我们可以有一个枚举数。它的值是A、B、C。它们与整数相对应。这能帮助我们将一维数值集合作为类型,而不仅仅是用整型作为类型。

当然你可以给它赋值任何整数,也就是设置哪些值可以赋值。

枚举其实一点都不复杂,就是这些了。它只是一种命名值的方法,当你想要使用整数来表示某些状态或者某些数值时,它非常有用。

01 为什么使用枚举

让我们来看看具体的看例子吧。

#include <iostream>int A = 0;
int B = 1;
int C = 2;int main()
{int value = A;if(4 == value){}return 0;
}

我有三个值要处理。我们把 A 设为 0,B 设为1,C 设为 2。然后在 main 的某个地方使用 value 变量。先让它等于这三个中的一个,然后通过一些代码来检查当前的 value 值是什么,然后执行某种操作。

很好,然而这样会带来一些问题。

这些 ABC 根本就没有分组,在代码后面的某个地方,你可能会有一个 D,或者你可能想再次声明 A,这就成了一个问题。——本质上最大的问题还是这些变量根本没有分组。

此外,它们只是整数。

这也就意味着我可以在将 value 值的直接赋值为 5,那它下面的代码就没有意义了。

我们希望能够从本质上定义一个类型,它只能是这三个数中的一种,而且能够把它们组合起来。——这里正是我们使用枚举的地方。

02 如何使用枚举

我们对代码做一些修改。

我创建一个枚举 enum。叫作 Example,然后我可以列出我想要的值。例如 A、B 或 C。这里不用 int 作为类型了。

现在我们可以使用枚举的名称作为实际类型。

#include <iostream>enum number_type
{A = 0,B,C
};int main()
{number_type value = A;if(-1 == A){}return 0;
}

这样就可以正确的使用枚举了。我们可以像例子中那样赋值。

如果我尝试赋别的值,会得到一个错误。——因为它必须是上面三个中的一个。

而且你要记住一点。这里面的值只能是整数

好了,接下来可以做之前想做的操作了。比如我会这样写。

你这个时候会有一个疑问。——我怎么知道 B 的值是多少?

你把鼠标悬停在第五行,查看 ABC 的值。可以清楚的看到 A 的值是 0,B 的值是 1,C 的值是 2。这些值是默认的,它默认第一个是 0,然后它一个接一个的递增。

你也可以直接指定它们的值,你想要设置成多少都可以。

如果你从一个非 0 的数字开始(比如 5),没有指定其余的值,你可以看到后面的 B 的值变为了6,C的值是7。就是这样递增的。

这里还可以做的另外一件事,是指定你想要给枚举赋值的整数类型。

这样做的的作用是:设置每一个数据的类型是 8 位整型。默认是 32 位的整型,——其实没有必要用那么大的数字是吧。

所以这样做减少了内存的使用。

不过千万要记住,这里不能使用 float。float 不是整数,这里必须是一个整数,比如char。

这就是枚举的本质,它只是给特定的值命名的一种方式。然后你就不必在各种地方处理各种整数了。

03 日志Log使用枚举的例子

让我们来看一个真正的例子,你可能会在这里使用枚举。

我们有一个日志类,这个类在 如何写一个 C++ 类 那一期讲过。

我们先简单的回顾一下那个程序。

#include <iostream> class Log
{
public:const int LogLevelError = 0; //日志级别Error = 0const int LogLevelWarning = 1; //const int LogLevelInfo = 2; //private:int m_level;  //私有的变量,用于类的内部public:void setLevel(int level)   //设置日志级别{m_level = level;    //}void Error (const char* messge)   //打印错误级别的日志信息{if(m_level >= LogLevelError)std::cout << messge << std::endl;}void warning(const char* messge)   //打印警告级别的日志信息{if(m_level >= LogLevelWarning)std::cout << messge << std::endl;}void Info(const char* messge)   //打印正常级别的日志信息{if(m_level >= LogLevelInfo)std::cout << messge << std::endl;}};int main()
{Log log;log.setLevel(log.LogLevelWarning);   //日志级别设为warning 1log.warning("hello ,this is warning");log.Error("hello,this is Error"); //log.Info("this is Info"); //return  0;
}

在这里我们使用了三个不同的 log 级别。它们只是整数 0、1、2。可以看到这是一个非常适合用枚举的地方。

因为我们有三个值,我们用它们作为整数来表示某个状态。

这个例子中的日志级别是指会展示哪种级别的日志。

接下来我们在这个类中创建一个名叫 Level 的枚举。

你可以看到我显示的把这个 LogleveError、LogleveWarning、LogleveInfo 设置为 0、1、2。我个人很喜欢这样做,这样可以帮助代码提高可读性。

然后删除下面的几个定义,最后调整成现在这个样子。

我们将它设置为枚举,等于是加了条件,它只能是那三个值了(纯粹从语法上 C++ 编译器会强制执行这些限制,但你也可以很容易的绕过它。它不是那种从物理上都无法设定的东西)。当然,我们的枚举数只是四字节的整数,只有四个字节的内存,你可以可以把任何你想要的东西放进那个内存里。

ok,我们通过设置类型为 Level 来限制我们的代码。

将下面的代码也做一些修正。

然后是主程序当中的 SetLevel 函数。

你会发现这里的设置有点不太一样。我们有一个枚举数叫做 Warning。在 Log 这个类的命名空间中,这个枚举 Level 本身不是一个命名空间,这个叫做枚举类

然而,对于普通的枚举而言,Level 并不是真正的命名空间,所以你不能把它当成一个命名空间,就意味着 Warning 和 Info 它们只存在于这个日志类中。你看到我可以把它设置为 Warning。

现在程序一切正常了。

最后修改过的代码

#include <iostream> class Log
{
public:enum LogLevel{LogLevelError = 0,LogLevelWarning,LogLevelInfo};private:LogLevel m_level = LogLevelInfo;  //私有的变量,用于类的内部public:void setLevel(LogLevel level)   //设置日志级别{m_level = level;    //}void Error (const char* messge)   //打印错误级别的日志信息{if(m_level >= LogLevelError)std::cout << messge << std::endl;}void warning(const char* messge)   //打印警告级别的日志信息{if(m_level >= LogLevelWarning)std::cout << messge << std::endl;}void Info(const char* messge)   //打印正常级别的日志信息{if(m_level >= LogLevelInfo)std::cout << messge << std::endl;}};int main()
{Log log;log.setLevel(Log::LogLevelWarning);   //日志级别设为warning 1log.warning("hello ,this is warning");log.Error("hello,this is Error"); //log.Info("this is Info"); //return  0;
}

最后的话

枚举的本质就是让我们的编码更容易,让我们的代码更干净。

在枚举的后面其实就是整数,你可以把它们用在很多地方。枚举有很多很多用途

好了,记住:如果你有一个数值集合想要用数字来表示它们,那么枚举就是你想要的。

http://www.hengruixuexiao.com/news/42143.html

相关文章:

  • asp 做网站网络营销推广技术
  • 沈阳黑酷做网站建设优化公司怎么样网站的网络推广
  • 郑州做网站擎天seo网站推广优化
  • 内页网站地图 权重seo门户网站
  • 可以免费做宣传的网站惠州百度seo哪里强
  • 抽奖网站怎么做的广州seo外包公司
  • 早期做网站 如何推广推广信息发布平台
  • 咸阳网站建设报价免费b站推广软件
  • 免费网站一键生成南宁网站建设服务公司
  • 静态网站做毕业设计经营管理培训课程
  • 网站建设自助建站云建站杭州新站整站seo
  • 网上哪些网站可以做设计项目成都企业seo
  • 做夺宝网站要办理什么虞城seo代理地址
  • 北京网站sem、seo杭州seo平台
  • php网站上传教程广州百度推广代理公司
  • 做街机棋牌上什么网站发广告陕西网站推广公司
  • 网站后台管理的超链接怎么做怎么在线上推广自己的产品
  • 建个人网站需要哪些交换链接营销实现方式解读
  • html5开发安卓app就业seo好还是sem
  • 驻马店做网站建设的公司一个新产品怎么推广
  • phpcms网站开发网站制作大概多少钱
  • 外贸主动营销网站建设自己的网站怎么做seo
  • 东莞网站建设营销网站品牌推广的意义
  • 企业公司简介范文广西seo公司
  • 地方政府网站建设中存在的问题怎样推广自己的商城
  • 怎么做电影流量网站吗德国搜索引擎
  • 电子商务网站建设重点厦门seo关键词优化培训
  • 长沙定制网站开发恢复正常百度
  • 湖北城乡建设厅官方网站线上如何做推广
  • 推荐网址云巅seo