联合(union)与结构有很多相似之处,联合也可以容纳多种不同类型的值,但是它每次只能储存这些值中的一个(即当我们已经给联合里的一个成员赋值后,再给另一个成员赋值时,将丢弃第一个成员的值)。
实例1:联合的应用
1 #include <iostream>
2
3 union mima
4 {
5 unsigned long birthday;
6 unsigned short ssn;
7 const char *pet;//将pet声明为一个指向不变字符串的指针
8 };
9
10 int main()
11 {
12 mima mima_1;
13
14 mima_1.birthday = 19970328;
15 std::cout << mima_1.birthday << "\n";
16
17 mima_1.pet = "Chaozai";//为字符串指针内的数据赋值
18 std::cout << mima_1.pet << "\n";
19 std::cout << mima_1.birthday << "\n";//由于覆盖,将输出pet中字符串存储的地址
20
21 return 0;
22 }
枚举(enum)类型用来创建一个可取值列表。枚举值不是字符串,编译器会按照各个枚举值在定义时出现的先后顺序把它们与0~n-1的整数(n是枚举值的总个数)分别关联起来。
实例2:枚举的应用
1 #include <iostream>
2
3 int main()
4 {
5 enum weekdays{Monday, Tuesday, Wednesday, Thursday, Friday};//编译后依次变为0、1、2、3、4
6
7 weekdays today;
8
9 today = Monday;
10 std::cout << today << "\n";
11
12 today = Friday;
13 std::cout << today << "\n";
14
15 switch (today)
16 {
17 case Monday:
18 std::cout << "hello";
19 break;
20 case Tuesday:
21 std::cout << "yiwofeiye";
22 break;
23 default:
24 std::cout << "Goodbye";
25 break;
26 }
27 return 0;
28 }
类型别名(typedef)可以为一个类型定义创建一个别名。例如:
定义typedef int* intPointer;后便可以使用intPointer myPointer;来定义整型指针。