1.结构体
struct inflatale { char name[20]; float volume; double price;
//std::string name;也可以将string对象作为成员的结构进行初始化。 };
inflable guest[2] =
{
{"Bambi",0.5,21.00},
{"Glorious Gloria",1.88,23.99}
};
2.共用体
- 共用体同时只能存储一中类型的值,该值类型,是其成员类型。共用体的长度为其最大成员的长度。
union one4all { int int_val; long long_val; double double_val; }
关于匿名共用体的初始化
struct widget
{
char brand[20];
int type;
union
{
long id_num;
char id_char[20];
};
};
widget price;
cin >> price .id_char
3.枚举
enum spectrum{red, orange, green, blue, violer, indigo, ultraviolet}
spectrum band;
band = red + orange; //red+orange将被转换为1+0,这是合法的,结果的类型是int
,但是类型不能赋给spectrum类型的band。
- 可以创建多个值相同的枚举量。
- 其中red,orange等作为符号常量,他们对应整数值是0~7,这些常量叫做枚举量。
- 在不进行强制类型转换时,只能将枚举量赋给枚举类型的变量。
- 枚举量是整型,可被提升为int类型,但int类型不能自懂转换为枚举类型。
- 对于枚举说,只用声明中指出的那些值是能用的,但是,c++通过强制类型转换,增加了可赋给枚举变量的合法值。
enum bits{one = 1, two = 2, four = 4, eight = 8}; bits nyflag; myflag = bits(6); //其中6不是枚举值,但它位于枚举定义的取值范围内。
- 每个枚举都有取值范围,通过强制类型转换,可以将取值范围中的任何整数赋给枚举变量,即使这个值不是枚举值。
- 枚举的取值范围:
(1)知道枚举量的最大值,找到大于这个最大值的、最小的2的幂,将它减去1,得到的值便是取值范围的上限。例如bits的枚举量的最大值是8,它的上限就是15。
(2)计算下限,需要知道枚举量的最小值,如果它不小于0,则取值范围的下限为0,否则,则采用与寻找上线相同的方式,在减去1之后,再加上负号。