C++学习笔记(三十八):c++ 联合体

本节介绍c++联合体union。一个联合体只能有一个成员,例如我们声明4个float变量,但联合体的大小仍为4字节,这4个float的内存是一样的。可以像结构体一样使用联合体,可以添加静态函数或者普通函数方法等。但不能使用虚函数。一般使用联合体和类型双关相关联。类型双关是指将同一块内存的数据类型转换成其他数据类型。例如将int a = 4;float b = (float),此处仅仅举例。当想给同一个变量取不同的名字是,联合体的作用就体现出来了。例如一个结构体Vector3(x,y,y),既想当作向量,又想当作三原色RGB。代码示例如下:

#include<iostream>
struct Vector2
{
    float x,y;
};
struct Vector4
{
    float x,y,z,w;
};

void PrintVector2(const Vector2& vector)
{
    std::cout << vector.x << ", " << vector.y << std::endl;
}

int main(){
    struct TestUnion
    {
        //创建一个匿名联合体,既可以表示float又可以表示int。
        union
        {
            float a;
            int b;
        };
    };
    TestUnion u;
    u.a = 2.0f;
    std::cout<< u.a << ", " << u.b << std::endl;

    std::cin.get();
}

2, 1073741824

  • 输出的2是float型2,1073741824是float型2的二进制表示。
  • #include<iostream>
    struct Vector2
    {
        float x,y;
    };
    struct Vector4
    {
        //可以看做是两个Vector2
        union 
        {
            //两种访问Vector4的方式
            struct 
            {
                float x,y,z,w;
            };
            struct 
            {
                Vector2 a,b;//a对应x,y,b对应z,w
            };
            
        };
    };
    
    void PrintVector2(const Vector2& vector)
    {
        std::cout << vector.x << ", " << vector.y << std::endl;
    }
    
    int main(){
        Vector4 vector = {1.0f,2.0f,3.0f,4.0f};
        PrintVector2(vector.a);
        PrintVector2(vector.b);
        vector.z = 800.0f;
        PrintVector2(vector.a);
        PrintVector2(vector.b);
        std::cin.get();
    }

    1, 2

    3, 4

    1, 2

    800, 4

  • 上述示例展示如何不新增PrintVector4函数,仅通过联合体通过PrintVector2来打印Vector4。
  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值