共用体的用法与结构体差不多,只不过将关键字由struct变成了union。共用体使不同的类型变量存放到同一段内存单元中,所以共用体在同一时刻只能存储一个数据成员的值,共用体的大小等于最大成员的大小(结构体变量的大小是所有数据成员大小的总和)。

在程序中改变共用体的一个成员,其他成员也会随之改变。不是强制类型转换!而是因为他们的值的每一个二进制位都被新值所覆盖。

 1 #include <iostream>
2 #include <string>
3 #include <stdio.h>
4 using namespace std;
5 union DateUnion
6 {
7 int iInt1;
8 int iInt2;
9 double douDou;
10 char cChar;
11 };
12 int main()
13 {
14 DateUnion A;
15 A.iInt1 = 97;
16 cout << "A.iInt1=" << A.iInt1 << endl;
17 cout << "A.iInt2=" << A.iInt2 << endl;
18 cout << "A.douDou=" << A.douDou << endl;
19 cout << "A.cChar=" << A.cChar << endl << endl;
20
21 A.iInt2 = 65;
22 cout << "A.iInt1=" << A.iInt1 << endl;
23 cout << "A.iInt2=" << A.iInt2 << endl;
24 cout << "A.douDou=" << A.douDou << endl;
25 cout << "A.cChar=" << A.cChar << endl << endl;
26
27 A.cChar = 'a';
28 cout << "A.iInt1=" << A.iInt1 << endl;
29 cout << "A.iInt2=" << A.iInt2 << endl;
30 cout << "A.douDou=" << A.douDou << endl;
31 cout << "A.cChar=" << A.cChar << endl << endl;
32 system("pause");
33 return 0;
34 }

运算结果:


注意:

string可以作为结构体的成员但是不能作为共用体的成员。所以下面共用体的定义是错误的:

union DateUnion
{
int iInt1;
int iInt2;
double douDou;
string strChar;
};

严重性 代码 说明 项目 文件 行 禁止显示状态

错误 C2280 “DateUnion::DateUnion(void)”: 尝试引用已删除的函数

此错误的原因:String 是一个类,有自己的构造函数,析构函数。

我们分析一下:

Union的一大特征在于,一个Union类中的所有数据共享同一段内存。如果union类的成员包含自己的构造函数,析构函数,那么同一Union类的成员在初始化时,就有可能会执行不同的构造函数。这是无法预料的。所以,我们在定义Union类时要尽量避免成员变量是对象(含有自己的构造函数)。

解决方案:String 换成基本的数据类型:char 等

union DateUnion
{
int iInt1;
int iInt2;
double douDou;
char cChar;
};

【C++】共用体\联合体(union)的更多相关文章

  1. C语言共用体(Union)

    通过前面的讲解,我们知道结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员.在C语言中,还有另外一种和结构体非常类似的语法,叫做共用体(Union),它的定义格式为: uni ...

  2. C语言中的共用体(union)和枚举(enum)

    1 union union Data{ int i; char ch; float f; }a={1, 'a', 1.5}; //错误 union Data a = {16}; //正确 union ...

  3. C语言:结构体和联合体(共用体)

    结构体:struct 1.结构体变量的首地址能够被其最宽基本类型成员的大小所整除. 2.结构体每个成员相对于结构体首地址的偏移量(offset)都是成员的整数倍. 3.结构体的总大小为结构体最宽基本类 ...

  4. C语言共用体union

    union共用体说明: 当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中最大的变量长度的整数倍. 比如union中有{int x; double x1; char name[10] ...

  5. 共用体 union

    共用体是一种数据格式,能够存储不同的数据类型,但只能同时存储其中的一种类型. union one4all { int int_val; double double_val; long long_val ...

  6. [C#.NET 拾遗补漏]14:使用结构体实现共用体

    在 C 和 C# 编程语言中,结构体(Struct)是值类型数据结构,它使得一个单一变量可以存储多种类型的相关数据.在 C 语言中还有一种和结构体非常类似的语法,叫共用体(Union),有时也被直译为 ...

  7. C语言之共用体

    最近在复习C语言,特再次记录: 有时需要将几种不同类型的变量存放到同一段内存单元中.如一个int.float.char放在同一个地址开始的内存单元中.,也就是使用覆盖技术,几个变量相互覆盖,称之为共用 ...

  8. 6、C++共用体

    6.共用体 共用体(union)是一种数据格式,他能够存储不同的数据类型,但只能同时存储其中的一种类型.也就是说,结构可以同时存储int.long和double,共用体只能存储ing.long.dou ...

  9. 07.C语言:结构体、共用体、枚举

    一.结构体 是一种复合的数据类型,由多个不同类型的数据(为结构体的成员)组成的集合. 在c语言中没有给出结构体这种类型具体的形式(名称),但是给出类定义该结构体类型的方法(格式). 在使用结构体类型时 ...

随机推荐

  1. Xshell、Xftp评估过期的解决办法

    介绍一个     FTP客户端-IIS7服务器管理工具作为FTP客户端,它支持批量管理ftp站点.定时上传和定时下载,定时备份,且操作简洁.同时iis7服务器管理工具还是vnc客户端.并且支持批量管理 ...

  2. 接口测试原理及Postman详解

    接口测试定义 接口是前后端沟通的桥梁,是数据传输的通道,包括外部接口.内部接口.内部接口又包括:上层服务与下层服务接口,同级接口 生活中常见接口:电脑上的键盘.USB接口,电梯按钮,KFC下单 接口测 ...

  3. C#中的partial关键字

    这节讲一下partial(局部的,部分的)关键字,初学者可能没有接触过这个关键字,但是只要你写过winform或者WPF应用程序的话,那你肯定被动用过这个关键字.首先介绍一下这个关键字的作用,它用作定 ...

  4. 头文件string.h,cstring与string

    string.h string.h是一个C标准头文件,所有的C标准头文件都形如name.h的形式,通过#include <string.h>可以导入此头文件.之后我们就可以在程序中使用st ...

  5. localectl set-locale LANG=en_US.UTF-8

    localectl set-locale LANG=en_US.UTF-8    

  6. LDAP协议入门

    LDAP协议入门(轻型目录访问协议) LDAP简介 轻型目录访问协议,全称:Lightweight Directory Access Protocol,缩写:LDAP,它是基于X.500标准的,但是简 ...

  7. 。 (有些情况下通过 lsof(8) 或 fuser(1) 可以 找到有关使用该设备的进程的有用信息)

    umount时目标忙解决办法 标签(空格分隔): ceph ceph运维 osd 在删除osd后umount时,始终无法umonut,可以通过fuser查看设备被哪个进程占用,之后杀死进程,就可以顺利 ...

  8. PID基础

    经常有人会问到PID的用法,今天小编在这里例举温度控制中的PID部分,希望能够把PID的具体应用说明白. 先说几个名词: 1.直接计算法和增量算法:这里的所谓增量算法就是相对于标准算法的相邻两次运算之 ...

  9. svg 飞线,源码

    <html> <head> <meta charset="utf-8" /> <meta name="viewport" ...

  10. 用户从控制台输入n个整数,比较并输出其中的最大值和最小值

    package judgment;import java.util.Scanner;/** * 用户输入n个整数,找出最大值和最小值并打印输出 */public class Judgment { pu ...