摘抄自《C++ Primer Plus》,由于博主比较比较熟悉C语言,所以这里不会有太全面的语法介绍,基本上只是为了和C进行比较,从而突显C++相比于C在复合类型用法方面的特殊之处

序言
在C语言中,我们学过的复合类型有结构体、共用体、枚举类型。今天我们就来看看它们在C++中是什么样子。
结构体
1、定义结构体
struct fruit
{
string name;
float weight;
int count;
}
这和在C语言中一样
2、声明结构体变量
fruit apple;
我们发现一个与C语言不同的地方,这里的struct是可以省略的,我早就想这么干了。
3、初始化结构体
fruit apple =
{
"apple",
1.9,
10
};
cout << apple.name << endl;
除了上面的方法外,C++11还添加了额外的方法
fruit apple {"apple", 1.9, 10};
在C++11中,我们可以省略等于号
共用体
1、定义共用体
定义共用体和定义结构体很相似
union fruit
{
string name;
float weight;
int count;
}
结构体的特殊之处就在于它在某个时刻只能有一个成员变量是有效的,这是因为它的成员变量共用一块内存。也正是这个原因,共用体的长度为其最大成员的长度。
共用体的用途之一是,当数据项使用两种或更多种格式时,可节省空间。例如,假设管理一个小商品目录,其中一些商品的ID为整数,而一些的为字符串。在这种情况下,便可以通过使用共用体来节省内存。
当计算机的内存足够大的时候,好像没有必要使用共用体来节省内存,但是,并不是所有场景都有充足内存的,毕竟C++还用于嵌入式系统编程呢,另外,共用体常用于操作系统数据结构或硬件数据结构。
枚举类型
1、定义枚举类型
定义枚举类型和定义结构体很相似
enum spectrum {red, orange, yellow, green, blue, violet, indigo, ultraviolet};
这句话做了两件事
- 让spectrum成为新类型的名称;spectrum被称为枚举,就像struct变量被称为结构体一样。
- 将red、orange、yellow等作为符号常量,它们对应整数0~7.这些常量叫做枚举量。
2、枚举变量的特殊属性
- 枚举变量只能接收枚举量
- 枚举变量只定义了赋值运算符
- 枚举变量是整型,可以被提升为int型,但int类型不能被自动转换为枚举类型,但int可以通过强制类型转换变成枚举类型
3、枚举变量的赋值
- 可以使用赋值运算符来显式地设置枚举变量值:
enum bits{one = 1, two = 2, four = 4, eight = 8};
- 指定的值必须是整数
- 可以创建多个值相同的枚举量
- 在C++中,只要是在范围内的任何整数值都可以作为枚举变量,即使这个值不是枚举值
总结
和C差不多,但还是有一点点区别,比如不用写struct