C++枚举类型用法总结(enum)(可以用枚举字符常量代替常量)

2023-10-29

C++枚举类型enum表示枚举,通常用于定义个新类型的字符常量,比如enum {January,February,March}。枚举类型的作用域一般是整个文件或者类内。当枚举类型定义在文件开头时,则作用域是从定义位置开始往后(不包括函数内定义);当枚举类型在类内定义时,则作用域为整个类内。在类内的头文件定义和初始化枚举类型,当实例这个类的对象时,枚举类型不会占用空间,只是包含一个字符常量而已。

枚举类型的定义可以在整个文件夹,也可以在类内。当在整个文件夹时,所有枚举量不能有相同的。当在类内时,不同类的枚举常量可以相同,不影响。下面给出具体代码示例。

一、枚举类型定义在类内(用的是vs2013 IDE)

1.1新建一个控制台应用程序,然后在EnumTest.h,EnumTest.cpp,main.cpp中添加如下代码

EnumTest.h

#pragma once
typedef unsigned long Item;

class CEnumTest
{
public:
	CEnumTest();
	~CEnumTest();

	const void show() const;		//后面的const表示该函数不可更改类对象,也即是不能更改类对象的成员变量
private:
	enum {One=1,Two=2,Three=3};

	Item item[Three];
};

 

EnumTest.cpp

#include "EnumTest.h"
#include <iostream>

CEnumTest::CEnumTest()
{
}

const void CEnumTest::show() const
{
	std::cout <<"this->Three=="<<this->Three<<std::endl;
}

CEnumTest::~CEnumTest()
{
}

 

main.cpp

#include <iostream>
#include "EnumTest.h"	

int main()
{
	CEnumTest *enumTest = new CEnumTest();
	enumTest->show();

	system("pause");
	return true;
}

1.2输出结果如下

1.3总结

可以在类内用枚举定义多组字符常量,这些字符常量在类的头文件中申明和赋值;虽然这些字符常量被赋值了,但是却还是一个字符常量,而不是一个数值,一般枚举字符常量跟switch搭配使用。假如这些枚举字符常量被赋值给整形或者浮点型,则C++11新标准会自动转换为对应类型,编译器默认是用整形常量表示一个枚举类型字符常量的。

二、枚举类定义

枚举类的作用域同样是在定义的类内,但是枚枚举类是专门为枚举创建的类,也就是说,只能用于枚举。

2.1声明代码如下

enum class Data1{ First = 1, Second = 2, Third = 3 };
enum class Data2{ First = 7, Second = 8, Fourth = 9 };

2.2调用代码如下

#include <iostream>
#include "EnumTest.h"	

enum class Data1{ First = 1, Second = 2, Third = 3 };
enum class Data2{ First = 7, Second = 8, Fourth = 9 };

int main()
{
	CEnumTest *enumTest = new CEnumTest();
	enumTest->show();

	/*枚举类*/
	std::cout << "(int)Data1::First==" << (int)Data1::First << std::endl;	//枚举类Data1可以直接用作用域解析运算符::调用对应枚举成员常量Data1::First
	std::cout << "(int)Data2::First==" << (int)Data2::First << std::endl;	//枚举类Data2可以直接用作用域解析运算符::调用对应枚举成员常量Data2::First

	system("pause");
	return true;
}

2.3输出结果如下

2.4总结

由上面结果可知,枚举类定义后,可以直接用作用域解析运算符::直接调用对应枚举类的成员常量Data1::First,可以当成一个常量来调用。

以前C语言枚举的常规调用就是在枚举类中去掉class就可以了,即下面代码

enum Data1{ First = 1, Second = 2, Third = 3 };

其它用法跟上面两个基本一样,就不介绍了。

 

 

参考内容:

《C++ Primer Plus》(第6版)中文版  372-373页

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++枚举类型用法总结(enum)(可以用枚举字符常量代替常量) 的相关文章

随机推荐

  • Linux·C++多线程基础知识

    目录 1 多线程 1 1 多进程与多线程 1 2 多线程理解 1 3 创建线程 1 4 join与detach方式 1 join举例 2 detach举例 1 5 this thread 2 mutex 2 1 lock与unlock 2
  • 【Tensorflow】tf.nn.depthwise_conv2d如何实现深度卷积?

    实验环境 tensorflow版本1 2 0 python2 7 介绍 depthwise conv2d来源于深度可分离卷积 Xception Deep Learning with Depthwise Separable Convoluti
  • C#时间字符串转换

    class Program static void Main string args DateTime datetime DateTime Now 打印当前时间 Console WriteLine 时间为 n datetime n 方法1
  • Generator 函数

    Generator 函数 基本概念 与 Iterator 接口的关系 next 方法的参数 for of 循环 Generator prototype throw Generator prototype return next throw
  • docker quick start

    文章目录 安装 验证 设置阿里云加速代理 测试 常用命令 镜像和容器存储位置 容器生命周期 Dockerfile 构建镜像 部署tomcat 基础指令 构建redis镜像 容器间Link单向通信 容器间Bridge网桥双向通信 volume
  • 【Node.js实战】一文带你开发博客项目之日志(文件读写、stream流、写日志)

    个人简介 个人主页 前端杂货铺 学习方向 主攻前端方向 也会涉及到服务端 个人状态 在校大学生一枚 已拿多个前端 offer 秋招 未来打算 为中国的工业软件事业效力n年 推荐学习 前端面试宝典 Vue2 Vue3 Vue2 Vue3项目实
  • memcache清除缓存

    打开cmd 输入 telnet localhost 11211 flush all
  • 为博客添加樱花飘落的效果

    偶然看见别人博客中樱花飘落的效果 感觉很棒 于是我也给博客加上了樱花 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 新建 sakura js 新建一个 sakura js 文件 在里面填入下面的代码 代码来自于 折月
  • 快速排序的优化

    1 快速排序的基本思想 快速排序使用分治的思想 通过一趟排序将待排序列分割成两部分 其中一部分记录的关键字均比另一部分记录的关键字小 之后分别对这两部分记录继续进行排序 以达到整个序列有序的目的 2 快速排序的三个步骤 1 选择基准 在待排
  • 24. 在QML界面中嵌入QWidget窗口

    1 说明 目前QT官方主推的界面开发方式是采用QML进行界面设计 但在QML未流行之前 很多的项目都是采用QWidget开发的 把之前的代码全部转换为QML代码显然工作量非常大 如果能将QWidget窗口嵌入到QML界面中 那么开发效率将提
  • WTL 界面设计篇(CImageEx)

    头文件声明 CImageEx h pragma once include
  • chrony实现同步阿里云时间

    1 安装chrony yum install chrony y vim etc chrony conf 修改chrony配置文件 替换默认的centos server ntp1 aliyun com iburst server ntp2 a
  • 【Winform Vlc.DotNet Fill拉伸控件实现全屏】

    其实也有WPF得实现 但是这个效率更高 cpu占用在2 以内 基本都素在1 上下浮动 但是WPF基本就是3 起步了 想看WPF实现得右转 https blog csdn net weixin 38138153 article details
  • Linux usb子系统(二) _usb-skeleton.c精析

    drivers usb usb skeleton c 是内核提供给usb设备驱动开发者的海量存储usb设备的模板程序 程序不长 通用性却很强 十分经典 深入理解这个文件可以帮助我们更好的理解usb子系统以及usb设备驱动框架 写出更好的us
  • Python爬虫解析网页内容

    Python爬虫是一种自动化程序 可以模拟人类用户访问网页 获取网页中的内容 爬虫在信息采集 数据分析和网络监测等领域有着广泛的应用 在爬虫过程中 解析网页内容是非常重要的一步 Python提供了许多强大的库和工具 用于解析网页内容 其中
  • 基于MMDetection训练VOC格式数据集

    一 环境说明 基于前述安装MMDetection 数据集为VOC格式 主要版本如下 Python 3 7 8 CUDA 11 3 cuDNN 8 4 0 torch 1 12 0 torchvision 0 13 0 mmcv full 1
  • js逆向之猿人学-反混淆刷题平台第十八题(jsvmp)

    链接 第十八题 jsvmp 洞察先机 猿人学 内容分析 题目要求 抓取这5页的数字 计算加和并提交结果 接口分析 F12 点击第二页 这里我们能看到有三个请求参数 page t v 一看就能知道 page 页码 t 时间戳 v 加密参数 所
  • python编写字典爆破网站登录

    在做渗透时 因为太菜了 不会用网上的爆破工具 自己就即兴写了一个简单的字典爆破 新手小白可以借鉴思路 就当学习了 大佬请绕道 如果有好用的爆破工具 欢迎大佬推荐 方便理解 我简单说一下背景 渗透的是某靶机的网站 该靶机只用输入正确密码就能成
  • python idle 清屏

    使用 python idle 写代码时 写满屏幕后 总想清屏一下 类似Windows dos窗口的 cls 命令 百度查到好多种方法 经过测试 发现均不好用 本人使用版本为 2 7 8 1 在shell中输入 import os os sy
  • C++枚举类型用法总结(enum)(可以用枚举字符常量代替常量)

    C 枚举类型enum表示枚举 通常用于定义个新类型的字符常量 比如enum January February March 枚举类型的作用域一般是整个文件或者类内 当枚举类型定义在文件开头时 则作用域是从定义位置开始往后 不包括函数内定义 当