C++学习笔记(四)Union(共用体)和Enum(枚举)

文章介绍了C++中的共用体(union)和枚举(enum)的概念及用法。共用体用于节省空间,因每次只能存储一种类型的数据,需要手动判断并输出。枚举则提供了一种定义命名常量的方式,提高了代码的可读性和可维护性。
摘要由CSDN通过智能技术生成

1.共用体union

①形式和结构体相似,但是每次只能存储共用体中的一种类型的数据

#include<iostream>

using namespace std;

int main()
{
    //创建共用体数据类型uns
   union uns
   {
        int a;
        float b;
        double c;
   };
   uns un1;   //声明uns型数据un1;
   un1.a = 2;
   cout<<"un1.a = "<<un1.a<<endl;
   un1.b = 3.4; //此时2这个int值以及被丢弃了,un1里面只存在float 的3.4
   cout<<"un1.b = "<<un1.b<<endl;
   un1.c = 5.88;//b被丢弃
   cout<<"un1.c = "<<un1.c<<endl;

   cout<<"un1.a = "<<un1.a<<endl;//测试un1.a里面是啥

}

/************************运行结果**********************************

un1.a = 2
un1.b = 3.4
un1.c = 5.88
un1.a = -1202590843

******************************************************************/

②共用体有点:节省空间、方便数据类型转换

③一点疑问:既然共用体每次只能存储一个数据,为什么不直接cout<<un1;呢?

虽然编译器不会自动帮我们实现,但是是可以自己动手实现的

下面代码写了一个辅助函数,可以直接cout<<u;而不用指定成员

#include <iostream>

union MyUnion {
    int intValue;
    float floatValue;
    char charValue;
};

std::ostream& operator<<(std::ostream& os, const MyUnion& u) {
    if (/* 判断共用体当前存储的是哪种类型 */) {
        os << u.intValue;
    } else if (/* 判断共用体当前存储的是哪种类型 */) {
        os << u.floatValue;
    } else if (/* 判断共用体当前存储的是哪种类型 */) {
        os << u.charValue;
    }
    return os;
}

int main() {
    MyUnion u;
    u.intValue = 42;

    std::cout << u << std::endl;

    u.floatValue = 3.14f;
    std::cout << u << std::endl;

    u.charValue = 'A';
    std::cout << u << std::endl;

    return 0;
}

2.枚举enum

表面上来看枚举看起来很没有用,它把0、1、2、3...换个名称存起来,但是,在C++中,枚举(Enum)是一种用于定义命名常量的数据类型。枚举允许你创建一组具有特定名称的常量,这些常量通常代表一些有限的离散值。枚举可以提高代码的可读性和可维护性,使得代码更易于理解。

#include <iostream>

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

int main() 
{
    // 声明一个枚举变量并赋值
    Color selectedColor = GREEN;

    // 使用枚举常量进行条件判断
    if (selectedColor == RED) 
    {
        std::cout << "选中的颜色是红色" << std::endl;
    } 
    else if (selectedColor == GREEN) 
    {
        std::cout << "选中的颜色是绿色" << std::endl;
    } 
    else if (selectedColor == BLUE) 
    {
        std::cout << "选中的颜色是蓝色" << std::endl;
    } 
    else 
    {
        std::cout << "未知的颜色" << std::endl;
    }

    return 0;
}

上述代码,当然可以用if(selectedcolor == 0)、if(selectedcolor == 1)、if(selectedcolor == 2)来判断,但是可读性将会变差;另外枚举也会限制color的取值范围,这对程序运行有好处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值