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

C++:enum枚举共用体union

enum枚举

C++继承C的枚举用法
(1)典型枚举类型定义,枚举变量定义和使用
(2)枚举类型中的枚举值常量不能和其他外部常量名称冲突:
举例1宏定义,举例2另一个枚举

   // 定义一个名为Color的枚举类型
enum Color {RED,    // 红色,默认值为0GREEN,  // 绿色,默认值为1BLUE    // 蓝色,默认值为2
};// 声明一个枚举变量并赋值Color myColor = RED;// 使用switch语句来处理不同的枚举值switch (myColor) {case RED:cout << "The color is red." << endl;break;case GREEN:cout << "The color is green." << endl;break;case BLUE:cout << "The color is blue." << endl;break;default:cout << "Unknown color." << endl;break;}// 输出枚举的整数值cout << "The integer value of RED is: " << RED << endl;cout << "The integer value of GREEN is: " << GREEN << endl;cout << "The integer value of BLUE is: " << BLUE << endl;

C++11中扩展的枚举
(1)enum class enumType:valueType{one=xx, two, three};
(2)两种简写
(3)解决2个枚举中的重名问题,但是宏定义仍然不能重名

强类型枚举(Scoped Enumerations)
强类型枚举使用enum class关键字定义,它们是强类型的,不能隐式转换为整数,并且枚举成员必须使用枚举类型名进行限定。
简化写法1:

// 定义一个强类型枚举Color
enum class Color {RED,GREEN,BLUE
};

简化写法2:

enum Color {RED,GREEN,BLUE
};

完全写法:

// 定义一个基于整型的枚举Color
enum class Color1 : uint8_t {RED,GREEN,BLUE
};int test() {// 声明一个基于整型的枚举变量并赋值Color1 myColor1 = Color1::RED;// 使用switch语句来处理不同的枚举值switch (myColor1) {case Color1::RED:cout << "The Color1 is red." << endl;break;case Color1::GREEN:cout << "The Color1 is green." << endl;break;case Color1::BLUE:cout << "The Color1 is blue." << endl;break;default:cout << "Unknown Color1." << endl;break;}// 强类型枚举不能直接转换为整数,需要显式转换cout << "The integer value of Color1::RED is: " << static_cast<int>(Color1::RED) << endl;cout << "The integer value of Color1::GREEN is: " << static_cast<int>(Color1::GREEN) << endl;cout << "The integer value of Color1::BLUE is: " << static_cast<int>(Color1::BLUE) << endl;return 0;
}

static_cast 是 C++ 中的一种类型转换操作符,用于将一个表达式的值从一种类型强制转换为另一种类型。在这种情况下,它通常用于将某个对象或表达式从一个基类转换为它的派生类,或者是将一个非特定类型的值转换为整型(int)。static_cast 保证了转换的准确性和效率,因为它不需要运行时的动态检查,而是在编译时完成。

关于枚举的3个小细节
(1)枚举类型和值类型的互相转换,枚举类型是否可以++
(2)枚举类型的前置声明
(3)枚举类型超出范围访问是否会编译时或运行时报错

/ 前置声明
enum class Color1 ; // 声明 Color1 类型,但不提供具体定义

共用体union

C语言中union回顾
(1)union翻译成共用体更合适,而不是联合、联合体
(2)union中所有成员是多选一的关系,这是union和struct的最大差别
(3)union的典型用法是测试大小端,面试笔试常考,必须掌握

C++中union和C中不同
(1)C++中union类型定义后使用时可以省去union(和上节enum时一样)
(2)C++中union里成员除了普通的,还可以是对象,但是对象不能包含自定义构造函数、析构函数,简单说就是不能太复杂
(3)C++中经常用到匿名union,一般是内置在class内部做成员变量
匿名union:

union 
{char *p1;int *p2;
}m1;				// 直接定义了union变量m1
#include <iostream>
using namespace std;// 定义一个联合类型
union Data {int i;float f;char str[20];
};int main() {// 声明一个变量Data data;// 存储整数data.i = 10;cout << "data.i = " << data.i << endl;// 存储浮点数data.f = 220.5;cout << "data.f = " << data.f << endl;// 存储字符串strcpy(data.str, "Hello, World!");cout << "data.str = " << data.str << endl;// 注意,由于union的所有成员共享同一块内存,// 存储一个成员的值会覆盖之前存储的其他成员的值cout << "After storing str, data.i = " << data.i << endl;cout << "After storing str, data.f = " << data.f << endl;return 0;
}

在这里插入图片描述

总结

知道枚举的使用方法,强类型枚举(Scoped Enumerations)
知道共用体union的使用方法

学习记录,侵权联系删除。
来源:朱老师物联网大课堂

http://www.lryc.cn/news/386937.html

相关文章:

  • 动手学深度学习(Pytorch版)代码实践 -计算机视觉-47转置卷积
  • LinkedIn被封原因和解封方法
  • redis sentinel 部署
  • spring boot (shiro)+ websocket测试连接不上的简单检测处理
  • Jenkins - Python 虚拟环境
  • 每日一道算法题 面试题 08.08. 有重复字符串的排列组合
  • Apache Kylin资源管理全指南:优化你的大数据架构
  • 计算机网络微课堂(湖科大教书匠)TCP部分
  • C++ 字符串介绍
  • [Cloud Networking] BGP
  • Typora failed to export as pdf. undefined
  • windows 10 安装tcping 使用教程
  • [leetcode hot 150]第一百二十二题,买卖股票的最佳时机Ⅱ
  • openstack Y版在ubuntu22.04上不能创建超过8个cpu的虚拟机问题解决
  • 全国31省细分产品出口数据集(2002-2022年)
  • 1,Windows-本地Linux 系统(WSL)
  • K8S 角色/组件及部署方式的简单概述
  • 堆【模板】小根堆堆【模板】大根堆(回)
  • 【JavaScript】JavaScript简介
  • pg_rman:备份和恢复管理工具#postgresql培训
  • 【小学期】常用基于Swing的七个静态界面
  • JavaScript高级程序设计(第四版)--学习记录之迭代器与生成器(上)
  • 51单片机第9步_结构和联合
  • lua5.3.4的Linux的库文件下载地址
  • 网盘挂载系统-知识资源系统-私域内容展示系统
  • 水位自动监测摄像机
  • 基于SSM+Jsp的疫情居家办公OA系统
  • phpstorm2024代码总是提示“no usages”或者“无用法”解决办法
  • Unity WebGL项目问题记录
  • 如何级联移位寄存器(74HC595)