




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 c + + 通常被视作更好的c 。人们一直在探索从c 程序到c + + 的学习方法,本 文提出的c 和c + + 比较研究是其中之一。它的主要思想是,把c 到c + + 看作一 个对象化的过程:c 语言满足了程序员的需求,也提升了程序员的需求,对已经 被提升了的需求,c 语言已经难以满足,于是c + + 语言产生了。学习c + + 的一个 有效途径是从被c 提升的需求开始。比较研究的具体内容有两个方面,一是c + + 类与c 结构的比较,二是由c + + 编译器s i m p l i f i e r 等价转化后的c + + 代码与c 代 码的比较。本课题以a u t h o r w a r e 为主要开发工具,p h o t o s h o p 为辅助开发工具, 结合c 和c + + 具体的比较内容,进行了多媒体教学软件的设计与实现。 目前,程序设计语言方面的多媒体教学软件可以分为两类,一是电子讲稿式, 二是放映式。本课题开发出模仿式教学多媒体软件。具体所做的工作有以下几个 方面: 1 建立三级菜单,与学习的章节对应。 2 建立任务栏,便于调用一个主题的相关比较内容。 3 在一个多媒体界面同时展示一个算法实现的多种机制和手段,包括抽象结 构,存储结构,求解步骤,代码等,以便从更多的角度同时进行c 和c + + 的比较。 4 模拟编译系统的t r a c e 功能,逐条语句跟踪,并且同时展示比较变化中的内 容。 , 5 为了使多媒体教学软件更接近真实的程序运行环境,也为了方便用户使用 多种数据分析比较中的算法,处理中的数据可以由用户输入。 6 开发a u t h o r w a r e 的程序设计模板,实现上述的多媒体设计。 关键词:c ,c + + ,比较研究,多媒体,教学软件 a bs t r a c t c 付i s u s u a l l yr e g a r d e d 舔i m p r o v e dc m e t h o d so fl e a r n i n gc + + t h r o u g hc h a v e b e i n ge x p l o r e d t h ec o m p a r a t i v es t u d yb e t w e e nc a n dc + + p r o d u c e di nt h ep a p e ri s o n eo ft h e m ,w h o s ec r e a t i o nc o n s i s t si ns u c ha no b j e c t i v el e a r n i n gc o u r s et h a tc l a n g u a g em e e t st h ep r o g r a m m e r s n e e d s ,a n d , a tt h es a m et i m e ,p r o m o t e st h e i r c o m m a n d sw h i c hc l a n g u a g eh a sd i f f i c u l t yi nm e e t i n g i ti st h ep r o m o t e dc o m m a n d s t h a tc r e a t ec + + l a n g u a g e t h ec o m p a r a t i v es t u d yi sc o m p o s e do ft w op a r t s 。o n e c o m p a r i s o nb e t w e e ncs t r u c t u r ea n dc + + c l a s s ,a n da n o t h e rb e t w e e nc + + p r o g r a m t h r o u g hc + + c o m p l i e rs i m p l i f i e ra n dcp r o g r a m t h ep r o j e c t ,s e l e c t i n ga u t h o w a r ea si t sm a i nd e v e l o p i n gt o o la l o n gw i t h p h o t o s h o pa st h es e c o n d a r yo n e ,i 脚m a d et h ed e s i g n a n di m p l e m e n t a t i o no f c o u r s c w a r cb a s e do nt h ec o n c r e t ec o m p a r i s o n s t h ec u r r e n tm u l t i m e d i ae d u c a t i o ns o f t w a r ei np r o g r a m m i n gl a n g u a g ec a nb e d i v i d e di n t ot w oc l a s s e s o n ei se l e c t r o n i cl e c t u r e t w oi sf i l m - s h o w i n g t h ep r o j e c t h a sd e v e l o p e dan e ws t y l ec o u r s e w a r c ,i m i t a t i n gc o u r s e w a r c i t sm a i nc o n t e n t sc a nb e s u m m a r i z e da sf o l l o w s : 1 at h r e e - l e v e lt o o lb a rm e n uh a sb e e nb u i l du pt oc o r r e s p o n d st ot h et e a c h i n g m a t e r i a l si n d e x 。 2 at a s kb o xh a sb e e nc r e a t e df o rt h eu s e r st oc h o o s et h er e l a t e ds u b j e c t ; 3 d e m o n s t r a t i n g a tt h es a m et i m e ,t h em u l t i p l em e c h a n i s ma n dm e t h o d st o c o m p l e t eo n et a s ks u c ha sa b s t r a c ts t r u c t u r e ,s t o r a g es t r u c t u r e ,i m p l e m e n t a t i o n s t e p s ,c o d i n ge t c 4 i m i t a t i n gt h er e a l - t i m ec o m p i l e r st r a c ef u n c t i o n ,d e b u ge a c hi n d i v i d u a ll i n eo f c o d e ,a n ds h o wt h er e s u l ta tt h es a m et i m e 5 i no r d e rt om a k et h i se d u c a t i o n a ls o f t w a r et ob el i k et h er e a l t i m er u n t i m e e n v i r o n m e n ta n dt ol e ti t su s e r sa d o p tv m e t ys e t so fd a t aa n a l y s i s ,t h i ss o f t w a r e a l l o w si t su s e r st oe n t e rt h e i ro w nd a t a 6 d e v e l o p i n gp r o g r a m m i n gt e m p l a t e st oi m p l e m e n t t h ed e s i g na b o v ew i t ht h eh e l p o f a u t h o r w a r ek n o w l e d g eo b j e c t k e y w o r d s :c ,c 卜+ ,c o m p a r a t i v es t u d y ,m u l t i m e d i a , c o u r s e w a r e 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作和取得的 研究成果,除了文中特别加以标注和致谢之处外,论文中不包含其他人已经发表 或撰写过的研究成果,也不包含为获得丞注盘堂或其他教育机构的学位或证 书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中 作了明确的说明并表示了谢意。 学位论文作者签名:l 主季玉 签字日期: 口7 年弓月2 日 学位论文版权使用授权书 本学位论文作者完全了解鑫叠苤堂有关保留、使用学位论文的规定。 特授权丞鲞叁堂可以将学位论文的全部或部分内容编入有关数据库进行检 索,i :采j j 影e l j 、缩印或扫描等复锄手段保存、汇编以供查阅和借阅。同意学校 向固家有关部门或机构送交论文的复印件和磁盘。 ( 保崭的学位论文在解密后适用本授权说明) 学位沦文作者签名:习毒 _ 一 签字一期:年月f i 导师签名:多哆 - 签- - 7 - r i i :饥司 年乞月1 同 j 第一章绪论 1 1 本课题的提出 第一章绪论 几年前,天津师范大学管理学院提出课程整合的设想,其中的个设想是把 c 、c + + 和数据结构合并为一门程序设计综合课程,并作为院通修课,授课8 0 学 时,实验8 0 学时,相当于每周4 学时( 2 学时授课,2 学时实验) ,上下两学期。 该设想在2 0 0 2 年被确立为天津市计算机基础课程改革项目。在缩短课时、增加 教学内容、扩展教学对象的情况下,能否保证课程质量,成为该项目的一个难题。 解决这个难题主要依赖两个方面的创新,一是思想方法和学习方法的创新,二是 教学手段即多媒体教学软件的创新。本文主要结合多媒体设计实例,论述了第二 个创新。 1 2 本文的指导思想 c 语言满足了程序员的需求,也提升了程序员的需求。对已经被提升了的需 求,c 语言已经难以满足,于是c + + 语言产生了。“c + + 通常被视作一种更好的c , 或者说c 的超集。c 语言中许多麻烦的地方,含糊不清的地方在设计c + + 时得到 了解决”【。因此本文认为,学习c + + 语言的一个有效方法是从被c 语言提升了 的而又无法被c 语言满足的需求开始。 这个被c 满足而又提升了的需求主要表现在对结构或抽象数据类型的实现 上。c 语言可以用来创建结构,但是用c 语言创建的结构不能像语言内在类型一 样使用。于是,“用户从设计自定义数据类型开始扩展c 语言,直到c + + 类。“类 是编程人员表达自定义数据类型的c + + 机制。“c + + 对c 的结构体类型作了实质 性的扩充”【2 】。“c + + 的许多性能都围绕着一个根本的思想:创建新的数据类型 的能力 【3 1 。“c + + 有一个丰富的特性集,这几乎是c 语言的一个完备超集【4 】。 因此本文认为,c 、c + + 和结构可以融合到一个对象性的生成过程中去:人创造 了对象,对象提升了人的感觉,提升了感觉的人又创造出能够进一步提升人的感 觉的对象,“这是一个生生不息的过程 1 5 】。 这个思想或者说是设想,并不是奇想。b r u c ee c k e l 教授在他的c + + 编程思 第一章绪论 想一书中说:“由于很多人学习走了弯路,因此,我们已经开始探索c 程序员 转移到c h 语言性能层上的方法 6 1 。a is t e v e n s 教授在标准c + + 宝典一书中 也说:“只有一个想法可支持我思考如何从传统c 程序平滑、渐进地过渡到c + + : 通过数据抽象,到面向对象编程【_ 7 1 。而“数据抽象是程序设计的中心内容。这 种抽象被称为抽象数据类型( a d t ) ,它定义了数据取值范围和表现结构,以及 对数据的操作集 【8 j 。 然而,拥有一种思想或设想很重要,如何实现这种思想或设想更重要。本 文以基本顺序表的c 语言实现到c + + 语言实现的转化为基础,以多媒体为手段, 用对比的方式,按照渐进的过程展示了实现这种思想的方法。这个方法使c h 语言本真不再是科学家头脑中暗想出来应该这样或那样,而是每个人都可以从 具体的、可感受的、有规律的发展变化过程中去发现和学习。同时,“多样的 信息表现形式。通过同时或交替地呈现文字、图像、声音、动画等信息形式, 它能为学生提供一个生动逼真的教学环境,激发学生的学习积极性,强化学生 的记忆,提高学习效率,改善学习效果”【9 1 。 1 3 多媒体教学软件的总体设计思想 2 0 0 1 年,教育部在关于加强高等学校本科教学工作提高教学质量的若干 意见中指出“国家重点建设的高等学校所开设的必修课程,使用多媒体授课的 课时比例应达到3 0 以上,其它高等学校应达到1 5 以上 【1 0 】。目前,随着多媒 体教学规模的日益扩大,很多高校多媒体课程的数量已经达到甚至超过了这个标 准。然而,多媒体教学是否达到了理想的教学效果,其设备是否最大限度地发挥 了教学功能,还是一个值得探讨的问题。程序设计类课程的课件尤其如此。 程序设计类课程具有这样几个特点:内容抽象,推理严格,算法实现机制多。 学习这样的课程,学生的注意力需要特别集中。多数的学生,特别是非计算机专 业的学生,对这样的课程都感到乏味。针对这些特点,本设计立足于教材c c + + 与数据结构,突出课程的重点、难点,加强c a i 课件的针对性,力争做到“科 学性、系统性、实用性”三者统一。 1 ) 科学性。体现教学组织的科学性,课件结构严格按照学生正确的思维方式和 过程来设计,与程序设计步骤和执行过程同步。 2 ) 系统性。与教材内容密切配合,风格统一。 3 ) 实用性。界面设计简洁直观,易于操作;文本、图形、动画等各种媒体使用 合理,搭配适当,层次分明i l l j 。 2 第一章绪论 在多媒体开发工具的选择方面,本着实用原则。“易学易用、界面友好是所 有c a i 开发平台的设计者所努力追求的目标。但是在事实上,c a i 开发工具的方便、 易学易用与其高效性、灵活性是很难两全其美的。这就要求使用者在制作c a i 课 件前,选择既能达到制作目的,又能适合自己的开发工具”【1 2 】。 本课题选用了基于图标方式的a u t h o r w a r e 作为主要的开发工具,p h o t o s h o p 为辅助的开发工具。a u t h o r w a r e 的程序设计结构和系统函数与课件所要服务的教 学内容比较接近,使用a u t h o r w a r e 制作课件的过程,实际上也是将本课程的知识 和思想活学活用的过程。p h o t o s h o p 处理图像直观灵活,所见即所得。它的绘画 功能和选择功能使得图像编辑十分方便,图像变换功能可以制作特殊效果的图 像,它接受广泛的图像输入到输出设备,支持p d f 、t i f 、j p g 、g i f 、b m p 、p s d 等多种图像文件格式和色彩模式【1 3 1 。使用它主要是制作特殊的图形和清新的色 彩。 1 4 多媒体教学软件的开发过程 根据软件工程对软件制作的要求和多媒体应用软件的特点,多媒体教学软件 开发的一般流程可划分为四个阶段: 第一阶段:选题。首先确定课件的学科内容及所要达到的目的;然后了解课 件的使用对象,包括他们的教育水平、年龄、学习要求。 第二阶段:编写脚本。脚本应由具有丰富教学经验的教师编写,最好是主讲 教师。系统地安排教学内容和教学活动,突出教学重点和难点,反映课程的内在 规律,体现教师的创新的教学思想和方法。 第三阶段:详细设计。包括两项工作:利用多媒体编辑器进行多媒体实现效 果设计;利用多媒体创作工具实现多媒体课件的程序设计。 第四阶段:测试。由主讲教师,脚本设计者和课件设计人共同参与测试检验。 发现问题,解决问题,以达到预定设计目的。 本文主要论述第三和第四阶段的内容。但是,严格地说,这四个阶段没有明 确的界限,而是交错进行的。脚本的要求在实际的多媒体实现过程中,可能发现 不切实际,超出了多媒体软件的能力,也可能不具体,难以明确的表示,也可能 实现效果不理想等,于是脚本需要修改。反之,多媒体的具体实现,可能,激发 了主讲教师和脚本制作人员的灵感,丰富了他们的想象力,这时,脚本也需要修 改。这是一个往复的过程,几次,十几次,甚至几十次的往复。 第一章绪论 1 5 意义 i c a i 系统( i n t e l l i g e n tc o m p m e r a s s i s t e di n s t r u c t i o ns y s t e m ) 即智能计算机辅 助教学系统。是将人工智能( a r t i f i c i a li n t e l l i g e n c e ,简称m ) 原理和技术应用于 计算机辅助教学( c a i ) 系统。这是由专家系统和人工智能技术支持的深入发展的 高级阶段。人工智能是一门涉及数学、计算机科学、控制论、信息论、哲学等学 科的交叉和边缘学科;专家系统是一种具有特定领域内大量知识与经验的程序系 统【1 4 】 1 5 1 1 6 】。 i c a i 将教学内容与教学策略分开,根据学生的认知模型提供的信息,通过智 能系统的搜索与推理,动态生成适合于个别化教学的内容与策略;通过智能诊断 机制判断学生的学习水平,分析学生产生错误的原因,同时向学生提出更改建议、 以及进一步学习内容的建议【1 7 】;通过对全体学生出现的错误分布统计,智能诊断 机制将向教师提供教学重点、方式、测试重点、题型的建议;为教师提供友好的 教学内容、测试内容维护界面,无需改变软件的结构即可调整教学策略;通过对 学生认知模型、教学内容、测试结果的智能分析,向教学督导人员提供对任课教 师教学业绩评价的参考意见。可以说,一个理想、完美的i c a i 系统就是一个自主、 优秀的“教师”。 以现有的科学技术水平而言,短时期内显然无法实现具备上述全部功能的 i c a i 系统。一般认为,只要具有下列一个或几个特征的c m 系统就可以称之为 i c a i 系统【1 8 】: 1 ) 每个课件一般是智能化的,或者有较高的智能化程度。 2 ) 给出和设计几类典型的“学生模型”。根据每个学生的学历、业务基础、分析 和解决问题的能力、心理特点和智力条件判定其模型,并由此给出适于他的 学习计划,实现因材施教的原则。这就是说,在教学过程中,要充分发挥每 个学生的特点和积极性,在教师、计算机教学系统和学生之间形成相互协调 的关系。 3 ) 有体现教师知识、讲授方法和教学策略的“教师模型”,它相当于教学专家系 统中的知识和规则集合。 4 ) 有良好的人机接口,以便实现人机对话。 5 ) 有相应的教学管理支持。如学籍管理等等。 6 ) 能根据每个学生的学籍档案、学生模型和要求,自动而有效地制定教学计划 和编排学习课件的顺序。 不难看出,i c a i 与传统的c a i 相比,更加符合教育教学的规律,切合学生 的认知习惯,具有明显的优越性。 4 第一章绪论 计算机不仅是工具,而且是继理论方法和实验方法之后的又一种科学方法。 为了使计算机可以面向更广大的读者,把c 、c - h - 和数据结构这些程序设计类重 要课程整合起来,在保证质量的同时,向非计算机专业的学生开放,这是有实际 意义的一步。而压缩课时,注重方法,调动学生自主学习的积极性,是能否迈出 这一步的关键。多媒体教学软件的开发为有效地解决这个问题提供了物质保障。 第二章课件的基本功能设计 第二章课件的基本功能设计 程序设计类课程的内容抽象,算法复杂,算法描述和实现的机制多,要设 计和实现相应的多媒体教学软件,必须能够实现一些基本功能的设计要求。 2 1 脚本要求 1 按目录调用章节内容。以第1 9 章目录为例: 第1 9 章类的转换 1 9 1 拷贝构造函数、析构函数和拷贝赋值运算符函数 1 9 2 转换函数 1 9 2 1 成员函数的公有和私有 1 9 2 2 静态数据成员 1 9 2 3 转换构造函数 1 9 2 4 转换赋值运算符函数 1 9 2 5 成员转换函数 1 9 3 关系运算和算术运算 1 9 4 取值函数和赋值函数 1 9 5 用户类型之间的转换 1 9 6 n r v 优化 2 要求同一页面具有章节标题,程序代码,存储结构,显示器。光条跟踪每条 语句,并显示执行过程的变化和处理结果,输出结果在显示器上显示。同一个主 题的相关内容易于调用。处理的数据可以由用户输入。 2 2 多媒体实现效果设计 1 创建一个三级菜单格式来满足脚本的第一个要求。如图2 1 所示。其中“第 1 9 章类的转换 为一级菜单。“拷贝构造函数、析构函数和拷贝赋值运算符函 数”、“转换函数”、“关系运算和算术运算 等为二级菜单,“成员函数的共有和 私有”、“静态数据成员 到“成员转换函数 为三级菜单。采用该模式,与教材 第二章 i 件基本功能设计 脚本中的章节关系一一对应。 2为了满足脚本第二个要求,将章节标置于左下角,黑体白色字表示程序,绿 色框表示存储结构,跟踪光条为蓝色,显示器从图片资料库选取如图2 - 2 所示。 在显示器下边框中部建立一个数据输入按钮,以实现用户的数据输入,如图2 _ 3 所示。以任务栏格式实现一个主题的相关内容调用,如图2 _ 4 所示。 目2 - ii i 件= 菜单镕犄 第二章课件的基车功能设计 圈2 4 算# n e w 1 n e 自t 算# m l o c & 晒较 2 3 多媒体实现代码设计 ! j 一一:i 划! j 鱼j 三l _ j 率1 一l _ _ | _ | _ o j u ,一 - c 删 一血址u f 7 m r 7 吼- m n ,o :* 1 9 * n # * l 一0 3 0 l 一3 0 l 3 0 一o 3 0 2 0 q o ,0 3 3 0 4 - o ,3 0 4 酥一o ;0 7 a 0 5 - i0 e - o ,o ,o - d 3 0 7 吼 0 3 0 e1 0 7 3 0 8 ,n ,- o 0 j 札,0 0 1 0 - o ,1 口 唧一,0 ,1 i 一3 1 1 岍7 “o o 巩7 0 ,一。* 自t 自t * 自t # 删m # # 自, 岍n h 77 0 30 , 。”* 自t i | 一曲岫7 口o o删7 0 3 0 ;m m 自t # 僦1 l m l t 一 0 3 0删一 0 3 0 q 。$ * m j 。, 一一l 一0 3 口 皿一7 0 3 0 # * 日自* 一n l 一1 7 0 j 0唧0 6 # * t # 自t “一,o o 黜一7 0 o m j # * 自* , 岍n 7 0 ;o虬o ,0 日,。e t w # t # 岍一日h 一7 0 3 o ”3 0 , “n m $ # # * 日t 】 岫一- 一 o o邛一,0 3 一 目p 舞目z 目n * * 。 岫h 7 7 0 ;om l 0 s n ,。口眦m 。】 2 6 :5 2c础000 目2 - 5 = g 菜4 的多撼# 实现代码 第二章* 件基车功蛇设* 目“多攥体效* 设计目2 - 2 # 目2 - 3 的实现代日 亩 锰篓豁 韫i o 住盘瑟。, 广= i 棵捌鞴m 随篡 囱 _ f 盈 w _ _ l “。” 拥1 一 门域i 驻静瞄t :i i i 目 吕 恤= 韫飘 d j m 。 i = o j l 一 干一j 目2 - 7 多样体效果设计图2 4 的女现代日 第三章课件的教学内容设计 第三章课件的教学内容设计 “c + + 程序设计的一个主要教学难题就是在何时引入类和对象 1 9 1 。本文所 包含的教学内容主要是,从c 基本顺序表到c + + 基本顺序表类的转化,c 结构串和 c + + 类串的比较。下面简介这两个方面的内容。 基本顺序表结构把函数分为了基本操作函数和功能函数,前者是后者的编程 工具,客户程序员看到的接口,后者是前者的应用,是对特殊问题的解。为了代 码内部扩展而不影响客户代码,结构数据被“封装,仅由基本操作函数调用, 结构数据和基本操作函数由此构成一个像类型一样的整体。“这意味着能够把下 层实现和客户程序员看到的接口隔离开来,因此更容易改变具体实现,而不影响 客户代码”1 2 0 】。这是优秀的程序员的方法,“只有优秀的程序员才会理解他所使 用的语言,并且不管他用的是什么样的语言,他都能编写出优秀的程序一 2 h 。 而c 编译器并不完全支持这种做法。对c 编译器来说,基本操作函数和功能函数, 在声明格式、定义方法、调用方式和对结构数据的访问权限上都没有区别。解决 这个问题的方式是c + + 类。现在从一个简化的基本顺序表的c 版本出发,经过1 0 个步骤,将其转化为c h 基本顺序表类。 c 结构串改进了c 文本串,但是c 结构串作为用户创建的类型,还不能像语 言内在类型一样使用,例如,两个c 结构串不能通过关系运算符进行比较,c 结 构串之间不能利用赋值运算符来赋值,c 结构串不能作为函数参数等。 c 结构串的局限性是c 编译器的局限性。c + + 编译器把c 结构串提升为如语 言内在类型一样的存在,我们称之为c + + 类串。 3 1 脚本要求 1 将下面给出的简化的基本顺序表按1 0 个步骤转化为基本顺序表类: # d e f i n em a x s e q s i z e1 0 0 :,宏常量m a x s e q s i z e 表示数组容量 t y p e d e f s t r u e t 基本顺序表结构 t y p ed a t a m a x s e q s i z e ;形式数据类型t y p e 表示数组类型 i n ts i z e ; ) s e q l i s t ; v o i ds e t l i s t ( s e q l i s t 宰1 ) ; 构造函数。给元素个数s i z e 赋值0 i n tl i s t s i z e ( c o n s ts e q l i s t 幸1 ) ; 求长。取元素个数 第三章课件的教学内容设计 i n tl i s t e m p t y ( c o n s ts e q l i s t 木1 ) ; 判空。判断顺序表是否空 t y p eg e t d a t a ( c o n s ts e q c i s t 宰1 , i n ti d ) ;脓值。取下标为i d 的元素 v o i di n s e r t r e a r ( s e q l i s t 奎l ,t y p ei t e m ) ; 君插。将元素i t e m 插到尾元素之后 v o i dd e l e t e ( s e q l i s t l ,i mi d ) ;定点删除。将表中下标为i d 的元素删除 v o i ds e q e r r o r ( c o n s tc h a r 幸c ) ;错误信息报告 转化步骤: 1 ) c o n a 常量 将宏常量m a x s e q s i z e 改为c o n s t 常量: c o n s ti n tm a x s e q s i z e = 10 0 ; c o n s t 常量m a x s e q s i z e 表示数组容量 2 ) 布尔型函数 对仅取真假值的函数,将函数类型定义为布尔型: b o o ll i s t e m p t y ( c o n s ts e q l i s t 木1 ) ;判空 3 ) 常量型引用调用 把带有形式数据类型参量的值调用函数改为常量型引用调用: v o i di n s e r t r e a r ( s e q l i s t 掌l ,c o n s tt y p e & i t e m ) ;尾插 4 ) 函数类型是常量型引用 如果函数类型是形式数据类型,那么将其改为常量型引用: c o n s tt y p e & g e t d a t a ( c o n s ts e q l i a 事1 , i n ti d ) ;取值 5 ) 重载 “正如语言内部类型的加法操作一样,我们可能要定义一组函数,它们执行 相同的操作,但是作用在不同的参数类型上【2 0 】。 简化求长和判空等函数名: i n ts i z e ( c o n s ts e q l i s t 1 ) ; b o o le m p t y ( c o n s ts e q l i a 木1 ) ; 6 ) 成员函数 求长。取元素个数 判空 首先将构造函数和基本操作函数参量表中的结构指针l 改名为t h i s ,例如: v o i ds e t l i s t ( s e q l i s t * t h i s ) ; 给元素个数s i z e 赋值0 i n ts i z e ( c o n s ts e q l i s t 宰t h i s ) ; 求长 b o o le m p t y ( c o n s ts e q l i gi t h i s ) ;| 翔空 c o n s tt y p eg e t d a t a ( c o n s ts e q l i s t 宰t h i s ,i n ti d ) ;诹值 v o i di n s e r t r e a r ( s e q l i s t 木t h i s ,c o n s tt y p e & i t e m ) 尾插 v o i dd e l e t e ( s e q l i s t * t h i s ,i n ti d ) ;定点删除 错误信息报告函数没有结构指针参量,需要补充( 补充的t h i s 指针在定义中 没有用,我们称它为哑元) ,同时将函数名简化: 第三章课件的教学内容设计 v o i de r r o r ( c o n s ts e q l i s t * t h i s ,c o n s tc h a r c ) ;错误信息报告 然后将t h i s 指针隐藏,指向常量指针t h i s 的c o n s t 修饰符移到参量表括号之 后。最后,将构造函数和基本操作函数放入结构体内,成为结构的成员,称为成 员函数,后带c o n s t 修饰符的函数称为常量型成员函数: e o n s th a tm a x s e q s i z e = 10 0 ; s t r u c ts e q l i s t t y p ed a t a m a x s e q s i z e ; i n ts i z e ; v o i ds e t l i s t ( v o i d ) ;构造函数 i n ts i z e ( v o i d ) c o n s t ;常量型成员函数 b o o ie m p t y ( v o i d ) e o n s t ; v o i di n s e r t r e a r ( c o n s tt y p e & i t e m ) ; c o n s tt y p e & g e t d a t a ( i n ti d ) c d 雠常量型成员函数 v o i dd e l e t e ( i n ti d ) ; v o i de r r o r ( c o n s tc h a r * c ) c o n s t ;常量型成员函数 ) ; 成员函数的调用方式发生变化,原来是 l i s t s i z e ( & l ) ; l 基本顺序表结构变量 d e l e t e ( & l ,1 ) ; 现在是 l s i z e 0 ; l d e l e t e ( 1 ) ; 原来是 l i s t s i z e ( l ) ; l 基本顺序表结构变量指针 d e l e t e ( l ,1 ) ; 现在是 l 一 s i z e ( ) ; l - d e l e t e ( 1 ) ; c + + 编译器对新的调用方式的内部展开过程与上面生成函数成员的过程正相 反。例如: l s i z e o ; 内部展开过程首先是恢复显示t h i s 指针参量,然后根据参量表扩展函数名,扩展 之后,函数的内部原型假设是 i n t _ l i s t s i z e ( c o n s ts e q l i g 搴t h i s ) ; 第三章课件的教学内容设计 然后调用形式为: _ l i s t s i z e ( & l ) ; 实质上与原来相同,但是意义大不一样:成员函数属于结构的成员,由结构变量 负责调用,成员函数中隐藏的t h i s 指针就指向那个调用它结构变量。 原来一个结构空间的大小是其数据成员空间大小之和,现在结构中包含了函 数成员,是否结构空间就变大了? 没有。从上面演示的成员函数调用的内部过程, 我们不难理解,新的结构与原来的结构本质上是相同的,只是函数和调用有了内 部展开形式。 t h i s d a t a s i z e 区p 田丑工圈 l s i z e o ; 7 ) 成员函数定义形式 成员函数的定义可以在结构体内,也可以在结构体外。在结构体内定义,等 于内联函数;在结构体外定义,等于函数类型标识符和函数名之间要加入结构名 和域解析运算符“: ,以区别于一般实用功能函数。在函数定义体内,t h i s 指针 可以显示,也可以隐藏。 c o n s th a tm a x s e q s i z e = l0 0 ; s t m c ts e q l i s t t y p ed a t a m a x s e q s i z e ; h a ts i z e ; v o i ds e t l i s t ( v o i d ) ; i n ts i z e ( v o i d ) c o n s t r e t u m ( s i z e ) ; 宅e 结构体内定义 b o o le m p t y ( v o i d ) c o n s t ; ) ; b o o ls e q l i s t :e m p t y o c o n s t 佐结构体外定义 r e t u r n ( s i z e o ) ;r e t u m ( t h i s - s i z 剐) ; ) 8 ) 构造函数 在基本顺序表中,构造函数的执行过程是: s e q l i sl ; s e t l i s t ( & l ) ;调用构造函数 这两条语句是不能分开的,它们一起完成了基本顺序表的初始化。c + + 把这两条 语句合并条,完成赋初值的功能。具体方法是: 1 4 第三章课件的教学内容设计 首先把构造函数名和结构名统一为s e q l i s t ,使语句 s e q l i sl ; 既是定义语句又是调用构造函数语句。如果构造函数带参,那么实参在l 之后加 括号给出。 然后在声明中取消构造函数的函数类型声明。因为调用构造函数已经是基本 顺序表定义的一部分,这时该函数类型是什么,已经毫无意义。 s t r u c ts e q l i s t s e q l i s t ( v o i d ) ;构造函数声明,取消了函数类型 ) ; s e q l i s ts e q l i s t :( v o i d ) 构造函数外部定义 s i z e = 0 ;t h i s - s i z e = 0 ; ) 9 ) 访问权限 在基本顺序表中,各种函数都可以直接访问结构成员,没有区别。c + + 在结 构中增加了访问权限,一般分私有和公有。私有成员只能由结构成员访问,即对 结构成员公开,而结构以外的函数只能访问共有成员。公有部分是任何函数都可 以直接访问或使用的,即对外公开。 c o n s th a tm a x s e q s i z e = 10 0 ; s t r u c ts e q l i s t p r i v a t e :f f d 有声明 t y p ed a t a m a x s e q s i z e ; i n ts i z e ; v o i de r r o r ( c o n s tc h a r 幸c ) c o n s t ;私有函数 p u b l i c :公有声明 s e q l i s t ( v o i d ) ;构造函数 i n ts i z e ( v o i d ) c o n s t ; b o o le m p t y ( v o i d ) c o n s t ; v o i di n s e r t r e a r ( c o n s tt y p e & i t e m ) ; c o n s tt y p e & g e t d a t a ( i n ti d ) c o n s t ; v o i dd e l e t e ( i n ti d ) ; ,; 第三章课件的教学内容设计 结构以外的函数是“看不见”结构中的私有部分的。例如,实用功能函数p u r g e 是不能直接访问结构成员d a t a 、s i z e 和e r r o r ,只能通过公有成员函数来处理: v o i dp u r g e ( s e q l i s t 木l ) 删除表中的重复数据 i n ti j ; f o r ( i = 0 ;i s i z e 0 ;i + + ) j = i + l ; w h i l e ( j s i z e 0 ) i f m - g e t d a t a ( i ) = l - g e t d a t a ( j ) ) l - d e l e t e ( j ) ; e l s e j + + ; ) ) 1 0 ) n e w 和d e l e t e 运算符 表3 1c + + 运算符n e w 和d e l e t e 与c 运算符m a l l o c 和d e l e t e 对比 n e w 和d e l e t em a l l o c 和f r e e s e q l i s t 。p l ;圮h 顺序表类指针s e q l i s t + p l ;p c 基本顺序表指针。, p l - - - - - n c ws e q l i s t ;负责调用构造函数p l = ( s e q l i s t * ) n m l l o c ( s i z e o f ( s e q l 酬; j s e t l k 吣l ) ; ,调用构造函数, d e l e t e ( p l ) ;f r e e ( p l ) ; i n t p - - n e wi n t ; ,申请一个整形空间 i n t p = ( i m * ) m a l l o c ( s i z e o f ( i n t ) ) ; d e l e t e ( p l ) ;f r e e ( p ) ; i n t * l 产- - n e wi n t ( 5 ) ;申请一个整形空间,并赋值5i m 。p = ( i n t 。) m a l l o c ( s i z e o f ( i n t ) ) ; 萨5 ; d e l e t e ( p ) ;f r e e ( p ) ; i n t p a i - - - n e wi n t s ;,申请整形数组h a t p a i = ( i n t ) m a l l o e ( 5 * s i z e o f ( i n t ) ) ;* v o 请整形数组 d e l e t e l p a i ; p g 放动态数组空间 f l e e ( p a d ; 2 结构串和类串的结构成员中都有指针成员,这突出运算符n e w 及d e l e t e 和运 算符m a l l o e 及f l e e 的区别。要求通过表3 - 2 来表示这个区别。 1 6 第三章课件的教学内容设计 表3 - 2 简化的c 结构串和c - 卜+ 类串指针应用对比 c + + 类串c 结构串 c l a s ss t r i n g t y p e d e f s t r u c t ( c h a r s t r , i n ts i z e ;,串长 ( c h a r s t r , i n ts i z e ; v o i de r r o r ( c o n s tc h a 产c ) c o m t ;错误信息报告 ) s t r i n g ; p u b l i c : v o i ds e t s t f i n g ( s t r i n g s , c 灯n s tc h a r c ) 少构造函数 s u i n g ( c o n s tc h a r 萨”) ;,转换缺省构造函数 v o i df r e s t r i n g ( s t r i n g 。s ) ; ,析构函数, s t r i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石材行业加强石材产品质量控制计划
- 2025-2030中国锂离子电池隔膜市场发展分析及市场趋势与投资方向研究报告
- 2025-2030中国钢铁行业深度发展分析及投资前景预测研究报告
- 2025-2030中国金属管浮子流量计行业市场深度调研报告
- 2025-2030中国金刚石粉市场供需趋势与未来发展策略研究研究报告
- 2025-2030中国谐振子行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国视频监控系统行业市场发展现状及发展趋势与投资研究报告
- 2025-2030中国螺旋螺套行业市场发展趋势与前景展望战略研究报告
- 【小学二年级数学上册冀教版】第五单元测试题
- 三年级信息技术下册第三单元第21课网络助我游搜索引擎的使用教学设计冀教版
- 浙江省医疗机构麻醉药品、精神药品管理实施细则
- 《中国近现代史纲要》 课件 第十一章 中国特色社会主义进入新时代
- 机关单位申请要人的请示范文
- 铀矿冶安全规程
- 国标热镀锌钢管规格尺寸理论重量表
- 设计方案投标技术标文件
- 圆来如此简单公开课优质课件获奖
- (本科)审计(第五版)全套教学课件完整版PPT
- GB∕T 3639-2021 冷拔或冷轧精密无缝钢管
- 西师版六年级下册数学第五单元 总复习 教案
- 拖欠货款合同纠纷起诉状范本
评论
0/150
提交评论