本篇内容包括结构体,共用体和枚举。

一.结构体

1.声明

1
2
3
4
5
6
struct inflatable
{
char name[20]; //结构的成员
float volume;
double price;
};

如上所示,声明了一个结构体。结构定义的是新类型(inflatable)的特征。定义了结构后就可以声明这种类型的变量。

1
2
struct inflatable hat;
inflatable mainframe;

可以省略struct,这样就强调inflatable是一种新的类型。

对于结构的声明,应注意位置,关键是在使用的地方的前面,但是,最好在main函数的前面。C++不提倡使用外部变量,但是提倡外部结构声明。

1
2
3
4
5
6
inflatable guest =
{
"yl",
1.88,
29.99
};

关键在于用逗号分隔。

在C++11中是与此类似的,等号是可选的,如果大括号内是空的,那么值将是0,字符串每字节也是0。同时,不予许窄缩。

这种声明方式也是可以的,但是显然不好。

1
2
3
4
5
6
7
8
struct perks
{
int key_number; char car [12];
} mr_glitz =
{
7,// value for mr_glitz.key_number member
"Packard" // value for mr_glitz.car member
};

还可以声明没有名称的结构类型,方法是省略名称,同时定义一种结构类型和一个这种类型的变量:

1
2
3
4
struct 	// no tag
{
int x; // 2 members inty;
} position; // a structure variable

照常可以访问成员,但是在后面就不可以在创建该类型的结构。

2.结构数组

结构中可以包含的东西有很多,包括数组。也可以创建一个由结构组成的数组。

1
inflatable gifts[100]; // array of 100 inflatable structures

二.共用体

共用体(union)是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。也就是说,结构可以同时存储int、long和 double,共用体只能存储int、long或double。共用体的句法与结构相似,但含义不同。

1
2
3
4
5
6
union one4all
{
int int_val;
long long_val;
double double_val;
};

可以使用one4all变量来存储int、long和 double,条件是在不同的时间进行:

1
2
3
4
5
one4all pail;
pail.int_val = 15; // store an int
cout << pail.int_val;
pail.double_val = 1.38; // store a double, int value is lost
cout « pail.double_val;

由于共 用体每次只能存储一个值,因此它必须有足够的空间来存储最大的成员,所以,共用体的长度为其最大成员的长度。

共用体也是可以匿名。

三.枚举

C++的enum工具提供了另一种创建符号常量的方式,这种方式可以代替const。它还允许定义新类型,但必须按严格的限制进行。使用enum的句法与使用结构相似。例如,请看下面的语句:

1
enum spectrum {red, orange, yellow, green, blue, violet, indigo, ultraviolet};
  • 让 spectrum成为新类型的名称;spectrum被称为枚举(enumeration),就像struct变量被称为结构一样。

  • 将 red、orange、yellow等作为符号常量,它们对应整数值0~7。这些常量叫作枚举量(enumerator)。

在默认情况下,将整数值赋给枚举量,第一个枚举量的值为0 ,第二个枚举量的值为1,依次类推。

可以用枚举名来声明这种类型的变量。

枚举变量具有一些特殊的属性,下面来看一看。
在不进行强制类型转换的情况下,只能将定义枚举时使用的枚举量赋给这种枚举的变量,如下所示:

1
2
band = blue;// valid, blue is an enumerator 
band = 2000; // invalid, 2000 not an enumerator