联合 union
联合是一种特殊的类一个union联合可有多个数据成员 这些数据成员共同使用同一片存储空间(这样的机制目的是节省内存)
1.分配给一个union对象的存储空间至少要能容纳它的最大数据成员
2.union中不能含有引用类型的成员,默认情况下,union的成员都是公有的,这一点和struct相同
3.union既不能继承自其他类,也不能作为基类使用,所以在union中不能含有虚函数
4.为union的一个数据成员赋值时会令其它数据成员变成未定义的状态
联合
//可以像创建结构一样创建联合
union keywords
{
unsigned long Birthday;
unsigned short ssn;
const char *pet;
};
结构体内变量Birthday
,ssn
,*pet
是共用一块内存的,即&Birthday=&ssn=&pet
,且此union联合体所占的内存的长度由联合体中占空间最大的成员决定
所以在keywords
这个联合体中,其内存由Birthday
决定,所以他们实际存储的值只有一个,即最后赋值的那个,利用union可以用相同的存储空间存储不同型别的数据类型,从而节省内存空间,当访问其内成员时可用.
和->
来直接访问
注意:
const char *pet
: 声明了一个指向字符或常量字符串的指针(其中pet
所指向的内容不可修改 因为要输入字符串 而char
为单字符类型 需要用pet
的这个字符串的第一个参数的地址 进行字符串的查找)
联合
keywords key;
key.Birthday = 20000912;// key.Birthday第一次赋值
cout << key.Birthday << endl;//读取正常
key.pet = "wangcai";//key.pet第一次赋值
cout << key