C++ 枚举定义
我们在平常的编程中,时常需要为一些属性定义一组可以选择的值,比如文件打开的状态可能会有三种:输入 输出和追加
我们一般情况下记录这些状态是让每一个状态和一个常数相对应 比如
const int input=;
const int output=;
const int append=;
这个方法虽然也是可以得,不过它有一个明显的缺点就是 没有指出这些值是相关联的
而C++中的 枚举 提供了一种替代的方法 不但可以定义常数集 还可以将其聚集成组 如下:
enum Cities //enum是关键字 Cities为枚举类型名()
{
zhanjiang, //
Maoming, //0+1
Yangjiang, //1+1
Jiangmen, //2+1
};
在enum中,第一个枚举成员是0 后面每一个枚举成员的值等于前者加1
枚举的赋值
有时候,枚举的情况可能不能很好的符合枚举的默认情况 比如
我们可能希望枚举的值从n开始 不要成0开始
又可能 我们枚举的成员值 俩个不同的成员对应的常数需要是一样的 (比如 在Cities中 前面俩个城市在实际需要中要当成一个 我们就可以把它们对应的常数定义成相同的数)
enum Cities
{
zhanjiang=, //
Maoming, //
Yangjiang, //
Jiangmen, //
beijin=, //
tianjin,//
shanghai,//
Zhongshan = 1000, //
changsha,//
};
这时候,我们就可以根据实际的情况对于enum 进行一定的改变 因为enum中的值有一个性质:
如果有初始值 那么这个成员的值就是 初始值
如果没有 那么它就等于前面成员值加1
有一点需要注意:不能改变枚举成员的值 枚举成员本身就是一个常量表达式
其次我们在定义enum时 都定义了一个新的类型 如我们代码 新类型为Cities
和其他类型一样 可以初始化和定义Cities类型的对象
但是只能通过其枚举成员或者同一枚举类型的对象来进行初始化与赋值
int k=;
double x=10.2;
Cities oneCity = Cities(); //将50通过显式转换,为oneCity赋值
Cities sanjian = shanghai;//通过相同类型来进行初始化
tianjin = ; // 错误 enum定义的是常量 不能修改值
Zhongshan=k; //不同类型 不能修改常量的值
Zhongshan =x; //不同类型 不能修改常量的值
C++ 枚举定义的更多相关文章
- [改善Java代码]推荐使用枚举定义常量
枚举和注解都是在Java1.5中引入的,虽然他们是后起之秀,但是功能不容小觑,枚举改变了常量的声明方式,注解耦合了数据和代码. 建议83:推荐使用枚举定义常量 一.分析 常量的声明是每一个项目中不可或 ...
- 拔高你的Java代码质量吧:推荐使用枚举定义常量(转)
提高你的Java代码质量吧:推荐使用枚举定义常量 一.分析 常量的声明是每一个项目中不可或缺的,在Java1.5之前,我们只有两种方式的声明:类常量和接口常量.不过,在1.5版之后有了改进,即新增了一 ...
- UIView的几个枚举定义
UIView是iOS开发最主要的视图,非常多控件都是继承它,掌握当中的几个基本枚举定义,有利益理解视图的载入和參数差别. 一.UIViewAnimationCurve UIView的基本动画变化规律 ...
- python3 枚举定义和使用
定义 在某些情况下,一个类的对象是有限且固定的,比如季节类,它只有 4 个对象:再比如行星类,目前只有 8 个对象.这种实例有限且固定的类,在 Python 中被称为枚举类.程序有两种方式来定义枚举类 ...
- 一个C++宏定义与枚举定义重复的编译错误
C++的开发效率低是众所周知的,原因比如有: 语言复杂度高 编译效率低 工具链不够完整高效(尤其是linux下) 另外一个恐怕是不少编译错误让人摸不着头脑,今天碰到一个,举个例子: #include ...
- oc中的枚举定义
typedef NS_ENUM(类型,枚举名){ 枚举名+值名, 枚举名+值名,}; 该方法定义的枚举,OC会自动把其转换成合适当前版本的枚举.如果枚举值可合并的话 NS_E ...
- 提高Java代码质量:使用枚举定义常量(转)
一.分析 常量的声明是每一个项目中不可或缺的,在Java1.5之前,我们只有两种方式的声明:类常量和接口常量.不过,在1.5版之后有了改进,即新增了一种常量声明方式,枚举常量.代码如下: enum ...
- C++中枚举定义运算符
由于枚举也是用户定义类型,所以是可以定义运算符, 如: enum Day {sun, mon, tue, wen, thu, fri, sat}; Day& operator++(Day&am ...
- iOS中枚举定义的三种方式
最简单的方式 typedef enum{ num1 = 0, num2 = 1, num3 = 2 }num; 同时我们还可以使用NS_ENUM的方式定义枚举 typedef NS_ENUM (NSI ...
- C# 给枚举定义DescriptionAttribute,把枚举转换为键值对
在C#中,枚举用来定状态值很方便,例如我定义一个叫做Season的枚举 public enum Season { Spring = 1, Summer = 2, Autumn = 3, Winter ...
随机推荐
- C结构体指针的初步使用
#include <stdio.h> #include <string.h> struct Books { char title[50]; //char author[100] ...
- C# 百度API地址坐标互相转换
通过C#代码将地址字符串转为经纬度坐标,或者将经纬度转为具体的地址字符串,在不通外网的项目中是有需求的. 具体步骤: 一.创建BaiduMapHelper,用于定义地址信息和请求. public st ...
- 模板 - 数据结构 - 链表/LinkedList
一个只供删除的双向链表,为了简单不再引入head节点,而且也不进行next的套娃操作.空间使用略微多了一些,但是无伤大雅. struct LinkedList { static const int M ...
- [CTF]抓住那只猫(XCTF 4th-WHCTF-2017)
原作者:darkless 题目描述:抓住那只猫 思路: 打开页面,有个输入框输入域名,输入baidu.com进行测试 发现无任何回显,输入127.0.0.1进行测试. 发现已经执行成功,执行的是一个p ...
- 从一个表中往另外一个表中插入数据用到的SQL
insert into jdjc_zzjcxm (zj,jcxmmc) select sys_guid(),zbmc from JDJC_WHJXXMMC;
- java中快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?
一:快速失败(fail—fast) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加.删除.修改),则会抛出Concurrent Modification Exceptio ...
- TCP粘包拆包问题分析及应对方案
粘包拆包问题是处于网络比较底层的问题,在数据链路层.网络层以及传输层都有可能发生.我们日常的网络应用开发大都在传输层进行,由于UDP有消息保护边界,不会发生粘包拆包问题,因此粘包拆包问题只发生在TCP ...
- 第十二周助教工作总结——NWNU李泓毅
助教博客链接:https://www.cnblogs.com/NWNU-LHY/ 本次作业的要求:基于原型的团队项目需求调研与分析:https://www.cnblogs.com/nwnu-daizh ...
- Android 9.0 Http不能访问网络
最近在做公司产品,一期完成,打包给测试,然后....一台手机连服务器都访问不了看日志如下: UnityWebRequest返回code:0,显示Unknow error 服务器接口是http://非域 ...
- spring线程池的同步和异步(1)
spring线程池(同步.异步) 一.spring异步线程池类图 二.简单介绍 2.1. TaskExecutor---Spring异步线程池的接口类,其实质是java.util.concurrent ...