最近事情多所以每天只能学习一点点,所以今天才学到结构体方面的东西,虽然c语言中都学习过但是两种语言的面向的东西不一样,所以还是再看看。
1.结构简介——结构是一种比较灵活的数据格式。它是C++OPP堡垒的基石。结构是用户定义的类型,而结构声明定义了这种类型的数据属性。定义了这种类型后,便可以创建这种类型的变量。因此创建结构体包括两步。首先,定义结构描述——它描述并标记了能够存储在结构体中的各种数据类型。然后按描述创建结构变量(结构数据对象)例如存储产品名称,容量和售价
struct inflatable
{
char name[20];
float volume;
double price;
};
关键字struct表明,这些代码定义的是一个结构的布局。标识符inflatable是这种数据格式的名称,因此新类型的名称为inflatable.定义结构体,便可以创建这种类型的变量了
inflatable hat;
在C++中省略struct不会出错。
由于hat类型为inflatable类型,因此可以使用成员运算符(.)来访问各个成员。
与数组一样,C++11也支持将列表初始化用于结构,且等号(=)是可以选的:
inflatable duck {"dsd",0.12,9.98};
其次如果大括号内未包含任何东西,各个成员都将被设置为0。
2.c++使用户定义的类型与内置类型尽可能相似。例如,可以将结构体作为参数传递给函数,也可以让函数返回一个结构。另外,还可以使用赋值运算符(=)将结构体赋给另一个同类型的结构,这样结构中每个成员都将被设置为另一个结构中相应成员的值,即使成员是数组。
3.可以同时完成定义结构和创建结构体变量的工作,为此,只需要将变量名放在结束括号的后面即可:
struct perks
{
int key_number;
}mr_smith,ms_jones;
4.结构体数组
inflatable结构体包含一个数组。也可以创建元素为结构的数组,方法和创建基本类型数组完全相同。
intflatable gift[100];
这样,gifts将是一个inflatable数组,其中的每个元素都是inflatable对象,可以与成员运算符一起使用:
cin>>gifts[0].volume;
cout<<gift[99].price<<endl;
记住,gifts本身是一个数组,而不是结构,因此像gifts这样的表述是无效的。
要初始化结构体数组,可以结合使用初始化数组的规则(用逗号分隔每个元素的值,并将这些值用花括号括起来)和初始化结构体的规则(用逗号分隔每个成员的值,并将这些值用花括号括起来)。
inflatable guest[2]=
{
{"Bambi",0.5,21.99},
{"Godzilla",200,56.5}
}
5.共用体——共用体是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。也就是说,节后可以同时存储int、long、double,共用体只能存储int、long、double。共用体的句法与结构相似,但含义不同。列如:
union one4all
{
int int_val;
long long_val;
double double_val;
}
可以使用one4all变量来存储int 、long、double,条件是在不同的时间进行:
one4all pail;
pail.int_val = 15;
count <<pail.int_val;
pail.double_val = 1.38;
cout<<pail.double_val;
因此,pail有时可以是int变量,而有时又可以是double变量。成员标识了变量的容量。由于共用体每次只能存储一个值,因此它必须有足够的空间来存储最大的成员,所以,共用体的长度为其最大成员的长度。
共用体的用途之一,当数据项使用两种或更多种格式时,可以节省空间。
6.枚举——C++的enum工具提供了另一种创建符号的常量的方法,这种方式可以代替const.它还允许定义新类型,但必须按照严格的限制进行,使用enum的句法与使用结构相似。例如:
enum spectrum{red, orange, yellow, green, blue, violt, indigo};
- 让spectrum成为新类型的名称;spectrum被称为枚举。
- 将red、orange、yellow等作为符号常量,它们对应整数值0-7。这些常量饺子枚举量
- 在默认情况下,将整数值赋给枚举量,第一个枚举量的值为0,第二个枚举量的值为1,依次类推。
可以用枚举名来声明这种类型的变量:
spectrum band;
在不进行强制转化的情况下,只能将定义枚举时使用的枚举量赋给这种枚举变量,如下所示:
band = blue;
band = 2000;//invalid , 2000 not an enumerator
枚举量是整型,可以被提升为int类型,但int类型不能直接转化为枚举类型。
枚举类型可以被赋予枚举类型的值,但不能赋予其他类型的值。
如果int值是有效的,则可以通过强制类型转化,将它赋给枚举变量:
band = spectrum(3);
7.设置枚举量的值
可以使用赋值运算符来显示地设置枚举量的值:
enum bits{one=1,two = 2,four = 4, eight = 8};
指定的值必须是整数。也可以只是显示地定义其中一些枚举的值:
enum bigstep{frist,second=100,thrid};
这里,frist在默认情况下是为0.后面没有被初始化的枚举量的值将比其前面的枚举量大1.
8.枚举的取值范围——取值定义如下。首先,要找出上限,需要知道枚举量的最大值。找到大于这个最大值的、最小的2的幂,将它减1,得到的便是去取值范围的上限。例如前面定义的bigstep的最大枚举值是101。在2的幂中,比这个数大的最小值为128,因此上限的取值为127。要计算下限,需要知枚举量的最小值。如果它不小于零,则取值范围的下限为0.否则,采用寻找上限方式相同的方式,但加上负号。