c++程序计第七章.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章 结构与联合 学习目标: 掌握结构与联合类型的定义,结构对象与联合对象定义和初始化,对象成员的直接或间接访问的方法。 掌握利用结构创建、遍历、删除链表的方法。 掌握对结构的操作符重载函数的定义和调用,以结构作为函数参数和返回值类型的使用。 引言 前面我们学习过的数据类型(整型、实型、字符型、逻辑型以及相应的指针类型、引用类型、数组类型等,都是c++系统内定义的数据类型,又称为标准类型或预定义类型。 利用这些标准类型只能描述简单数据,如用整型可以描述人的年龄,字符型数组或指针可以描述人的姓名,实型可以描述人的工资等。 而对于复杂的数据项,(即包含多个简单数据项,且各简单数据项的类型、含义不同)就无法用内定义的数据类型描述了。 因此,我们要学习一种用户自定义的数据类型:结构。 7.1结构的定义 要描述一个复杂的数据项,如一个人的记录数据,假定包括姓名、性别、年龄、工资这四个数据项,这四个数据项的类型、含义不同,无法用内定义的数据类型来实现对记录数据的整体描述,这就需要用户自定义数据类型来实现。这里,我们使用一种结构类型来描述。 若结构类型名用Person表示,其中各数据项分别用name,sex,age,pay表示,则Person结构类型可以定义为: struct Person //结构类型的定义以保留字struct开头 {char name[10];//名字用字符数组表示 bool sex;//性别用逻辑型,true, false表示男和女 int age;//年龄用整型 float pay;//工资用单精度实型 };//结构体用{}将括号括起来,最后以;结束整个结构的定义 上面是一个结构定义的实例。定义结构的一般格式是: struct 结构类型名 {成员定义1; 成员定义2; …… 成员定义n;//每个成员又称为一个域 }; 结构类型名就是一个标识符,使用它,就象使用int,double这样的简单类型名一样。 如,若有了结构类型Person的定义,就可以用它来定义变量、数组、函数、指针等。Person r1,r2;Person a[10]; 一个结构占用的实际空间往往与编译系统有关,若不作特殊说明,结构的大下均为其理论值。一个结构所占空间的理论值等于每个成员所占空间之和。 如,结构Person所占的空间(大小)为19B。 结构定义举例 1、 struct A{ int a,b,c;}; 2、struct B{ char ch; int x,y; double z; }; 5、struct E{ int d,*e; B b;//成员b的类型是结构类型B }; 6、struct F{ double data; F *next;//next 为指向本身结构的指针成员 }; 结构使用说明 1、在一个结构的定义中,其成员类型可以是除结构类型本身外的任何已有类型,也可以是任何已有类型(包括本身类型在内)的指针类型(数组名可看作常量指针类型)。如上面例6中的next为指向本身结构的指针成员,但若把next定义为F的直接成员,则是不正确的。 如, F next;就不对了。因为c++语言中不允许递归嵌套定义,系统将无法确定它的对象所需占用的存储空间的大小。 7.2 结构变量的定义和初始化 结构变量的定义有三种格式: 一、用结构类型名定义变量 struct 结构类型名{ 成员定义1; 成员定义2; ……成员定义n; }; 结构类型名 变量名[={初始化数据}或同类型变量名];//[]内的内容表示可选。 初始化数据成员数可以小于变量成员数,在这种情况下,结构变量中后面未被初始化的成员由系统自动置为0。 当全局和静态结构变量未被初始化时,它的每个成员系统都自动置为0,当自动结构变量未被初始化时,它的每个成员的值是不确定的。 若有一个结构类型Arith的定义如下: struct Arith { char op; int a,b; }; 并且还有整型变量xx的定义:int xx=40; 下列每一条结构变量定义语句都是正确的 Arith x,y; Arith z1={‘+’,10,xx},z2={‘*’,60},z3=z1; Arith *d=z1; Arith a[4]={{‘+’,3,7},{‘-’,10,5),{‘*’,6,4},{‘/’,8,5}}; Arith *b[]={z1,z2,a+2,a[3]}; 前面我们学习过new,delete运算符可以实现动态的为某个对象分配和释放空间,这对结构类型的对象也同样可以用,但创建时不能对其初始化。 例:Arith *p=new Arith;Arith *a=new Arith[n];用delete释放上面申请的存储空间 :delete p;d

文档评论(0)

baa89089 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档