说明:未加说明,struct均指C++语言中的struct(可以有成员函数,可以定义访问属性)
1 什么是Union?
(1)与class,struct相似用于定义数据结构;union 可以说是一种特殊的类,有自己的成员变量也可以有自己的成员函数,默认访问属性为public;
(2)共享同一内存;同一Union中的各个变量共享同一内存,也就是说,所有变量互斥存在。
(3)基于(2),Union那么有人可能问,一个Union结构占用的内存大小如何确定?不多说上代码:
// TemplateExe1.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
using namespace std;
union uEx {
int a;
char b;
double c; };
int main()
{
cout << sizeof(uEx) << endl; return ;
}
执行上述代码,不管你是否对uEx进行了初始化,sizeof(uEx)的大小始终为8(sizeof(double),32位IDE)。
由此可得,联合(共用体变量)共用同一内存,内存大小固定为成员变量所占内存的最大值。
2 为何使用Union?
重要原因:节省内存。
代码:
// TemplateExe1.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
using namespace std;
union uEx {
int a;
char b;
double c; };
class cEx
{
int a;
char b;
double c;
};
int main()
{
cout << sizeof(uEx) << endl;
cout << sizeof(cEx) << endl;
getchar();
return ;
}
以上代码运行结果是:
8
16。
3 如何用?
(1)同结构体一样,定义-初始化-使用;使用时注意共享内存即可。上代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
union Grade {
int number;
char mark;
bool pass; }uGrade;
int main()
{
uGrade.number = ;
printf("%d",uGrade.number);
getchar(); return ;
}
代码中定义了一个全局Union 类,三个变量表示分数的三种形式。
应用场景归纳如下:
1)一门课程需要一个Grade数据结构来表示成绩;
2)同时成绩有三种情况,并且一门课程的成绩只有一种表示(要么百分制,要么等级制,要么过与不过)。
这时即可使用Union;