C语言程序设计第七章学习辅导.

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++语言程序设计第七章学习辅导

在程序设计中,经常需要将具有一定联系的一组数据类型相同或不同的数据组织起来,进行统一管理。为此,C++提供了结构这一聚合数据类型,它是用一种混合模式将不同的信息块收集到一起,并赋予一个统一的名字。

结构可以是由不同数据类型的数据成员组成,面向对象的结构类型还可以包含函数说明和定义,从而可以定义一个类,用标识符struct定义的类与用标识符class定义的类,其主要区别在于其成员的缺省访问属性不同。组成结构的每个数据称为该结构的成员。在使用结构之前,必须对该结构进行定义,即对该结构的组成进行描述。结构的定义需要告诉编译器:该结构由几个成员组成,每个成员的数据类型是什么。

㈠结构的定义

1.结构的定义格式

结构的定义以保留字struct作为标识符,其后是结构的名字,然后用一对大括号将该结构的成员包括起来,对于各成员,需要给它们指定一种数据类型,并指定一个成员数据名称。

定义结构类型的一般格式如下:

struct 结构类型名{

成员定义1;

成员定义2;

成员定义n;};

结构定义中的结构类型名为用户命名的任何一个有效的标识符,以后使用它就如同使用像int,double这样的简单类型名一样,允许出现在简单类型名能够出现的任何地方。成员定义1-n用来定义该结构的成员,成员定义的格式与无初始化的变量定义完全相同。

值得注意的是,结构的定义是一条语句,在其结尾处需要加一个语句结束符";"。

2.定义格式举例

如:struct B{

char ch;

int x,y;

double z;};

struct E{

char ch;

int x,y;

B z;};

struct F{

int x;

F* next;};

结构类型B包含有一个字符型成员ch,两个整型成员x和y,以及一个双精度浮点型成

员z;结构类型E包含有一个字符型成员ch,两个整型成员x和y,以及一个B结构类型成员z;结构类型F包含有一个整型成员x和一个F型指针成员next。

3.结构使用说明

⑴结构成员的类型可以是除本身结构类型之外的任何已有类型,或包括本身在内的指针类型。

⑵若结构类型定义在函数之外,则具有全局作用域;若定义在任一对花括号之内时,则具有局部作用域。

⑶同一作用域内用户类型名是惟一的。

⑷每一个结构类型定义中的成员名在该类型中必须惟一。

⑸不完整的结构类型定义是指在定义结构类型时只给出类型保留字和类型标识符而不给出定义体,不完整的结构类型定义在两个结构类型的定义互为先决条件时使用。

⑹结构类型定义语句属于非执行语句。

㈡结构变量的定义和初始化

在定义结构时,并没有说明任何实际的变量,它实质上是将结构的各种形式复杂的成员数据组合在一起,在定义一个这种结构形式的实际变量之前它实质上是虚设的,只是通知编译器用户自定义了这样一种聚合数据类型,当以后再次出现这一标识符时,编译器就知道它代表一种数据类型,并知道该类型的数据在内存中所占用的字节数。在对结构进行定义后,就可以用它来指明使用该结构的具体对象,这就称为结构的实例化,其一般形式如下:struct varible name 或varible name

其中struct是结构的标识符,variable是已经定义过的结构名称,name是结构变量的名称。

其中第一种带struct标识符的用法是沿袭C语言的传统用法,第二种用法是C++中提供的简化用法,它与普通变量的定义在形式上是一样的。

1.用结构类型名定义变量

〖struct 〗结构类型名变量名〖={初始化数据}|同类型变量名〗,…;

2.定义结构类型的同时定义变量

struct 结构类型名{

成员定义1;

成员定义2;

成员定义n;

}变量名〖={初始化数据}|同类型变量名〗,…;

3.定义无名结构类型的同时定义变量

struct {

成员定义1;

成员定义2;

成员定义n;

}变量名〖={初始化数据}|同类型变量名〗,…;

㈢结构成员的访问操作

系统对结构变量所提供的运算有赋值(=)、直接指定成员(.)和间接指定成员(->)三种。

赋值运算的两边为同类型的结构变量,即为同一结构类型标识符所定义的变量,运算功能是把右边变量的值拷贝到左边变量中,运算的结果为左边的变量。

在定义了结构的变量后,可以用操作符"."来访问结构中的成员数据。访问结构数据成员的形式如下所示:

name.member

其中name是结构变量的名字,member是其某一成员数据的变量名。

在定义了结构指针变量后,可以用操作符"->"来访问结构中的成员数据。访问结构数据成员的形式如下所示:

p->member

其中p是结构指针变量的名字,member是其某一成员数据的变量名。

㈣结构与函数

结构是一种类型,它能够使用在允许简单类型使用的所有地方,也允许作为函数的参数类型和返回值类型。

㈤结构与链表

1.结点类型:是一种特殊的结构类型,它除了包含有一般的数据域以外,还有指向自身结构的指针域。

2.若将每一个结点的指针域用来指向下一个结点,则这样的一系列结点就形成了一个链表。

3.访问一个链表,必须从表头指针出发顺序进行;链表通常用来存储同一类型的一组数据;结点通常使用new运算符动态产生。

㈥结构与操作符重载

1.单目操作符重载函数的定义格式:

返回类型operator 单目操作符(一个用户类型参数说明)函数体

2.双目操作符重载函数的定义格式:

返回类型operator 双目操作符(第一个参数说明,第二个参数说明)函数体

3.单目操作符重载函数的调用格式:

单目操作符实参或operator 单目操作符(实参)

4.双目操作符重载函数的调用格式:

第一个实参双目操作符第二个实参

或operator 双目操作符(第一个实参,第二个实参)

㈦联合

1.联合(union)的定义与结构类型的定义格式一样,只是关键字不同。但是,在任一时刻,联合中只有一个成员是可访问的。因为,对于联合,所有数据成员在存储空间上是重叠的。联合对象所占用存储空间的大小等于所有数据成员所占存储空间的最大值。

2.联合变量的定义格式同结构变量的定义格式一样,也包括三种情况;联合对象中成员的访问也与结构成员的访问一样。

3.匿名联合:在联合类型定义中,没有给出类型名又没有给出变量名。

相关文档
最新文档