C++学习之符合类型(3)

最近事情多所以每天只能学习一点点,所以今天才学到结构体方面的东西,虽然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.否则,采用寻找上限方式相同的方式,但加上负号。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值