enum枚举
C++继承C的枚举用法
(1)典型枚举类型定义,枚举变量定义和使用
(2)枚举类型中的枚举值常量不能和其他外部常量名称冲突:
举例1宏定义,举例2另一个枚举
// 定义一个名为Color的枚举类型
enum Color {
RED, // 红色,默认值为0
GREEN, // 绿色,默认值为1
BLUE // 蓝色,默认值为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的使用方法
学习记录,侵权联系删除。
来源:朱老师物联网大课堂