面向对象软件工程1

合集下载

面向对象技术与软件工程

面向对象技术与软件工程

1软 件 工 程 概 念 及 传 统软 件 工程 模 式 .
由于软件危机的产生 ,使人们认识到用传统方法再也无法驾驭如 此复杂的软件生产 , 是到了必须彻底解决软件危机 , 才能拯救这一最有 希望的新兴产业 的时候 了。1 8 96年北大西洋公约组织的计算机科学家 在联邦德 国召开 国际会议 , 讨论软件危机 问题 。 在这次会议 上正是 随着 计算机技术 的发展及人们对软件本质和内在规律认识的提高 ,对软件 工程的定论也在变化。著名的软件工程专家 BW. em对软件工程的 . B h o 定义是 :运用现代科 学技术知识来设计 并构造计算机程序及 为开发 、 “ 运行和维护这些程序所必须的相关文件资料” 。 软件工程采用的方法是把软件生存周期划分成若干个阶段 ,每个 阶段的任务相对独立 , 而且比较简单 , 于不同人员分工协作 , 而降 便 从 低整个软件开发工程的困难程度 。 在实现每个 阶段 的任 务时 , 采用 的是 系统化 的技术方法——结 构化分 析和结 构化设 计技术。这是传统的软 件工程模式。它的缺点是强调 了分阶段 实施模块化 、 结构化程序设计技 术 和方法 , 而忽视了人在软件开发过程中的地位 和作用 。 2面 向对 象技 术 . 在计算机领域 , 多新方法和新技术都从编程 阶段首先开 始 , 很 进而 发展到软件生命期 阶段 ,早在 6 0年代未 EW.i s a就提 出了结 构化 . Dj t kr 程 序设计 的概念 ,为程序设计 方法学奠定 了基础 。7 O年代美 国的 E . Y uo 授 提 出了 结 构 化 分 析 方 法 , 出 了分 析 和设 计 比编 码 更 为 重 o dn教 指 要, 这一技术当时曾被软件界看成是治愈“ 软件危机 ” 的灵丹妙药 , 实 其 由不然。面对大型软件系统 , 用结构化方法 , 系统的重要性 、 稳定性 、 扩 充性都无法实现 。8 0年代面 向对象方法应运而生 , 为软件工程增添 了 活力。面向对象分析和面 向对象设计是 当今面 向对象的关键技术。 21面 向对 象 的 概 念 . 面向对象简称为“ 0 。 0 ” 这是 目前计算机业界使用的高频词 。 0 ” “0 代 表着一种新 的思维方式 , 代表着一种新 的程序设计方法的潮流。 传统的程序设计方法 , 不论是需求分析 , 还是系统设计 , 是针对 都 数学模 型的 , 出发点 是“ 怎样做 ” 即用计算 机求 解这个 实际 问题 应该 , “ 怎样做” 面 向对象方法的出发点是 :是什么” 即要求解 的实 际问题 , 。 “ , 它到底“ 是什么 ” Y udn给 出了面向对象的一个定义 :面 向对象 =对 。 o to “ 象 +类 +继承 +通信” 。 211 象 ..对 对象是 面向对象开发模式 的基本成分。每个对象可用其一组属性 和它可以执行的一组操作 来定 义。属性 一般 只能通过执行对象的操作 来改变。操作又成为方法或服务 , c +中称为成员 函数 , 在 + 它描述了对 象执行 的功能 。若通过消息传递 , 还可以为其他对象使用 。而消息是一 个对象与另一个对象之 间通信 的手段 ,是要求 另一 个对象 执行类中定 义的某个操作的规格说 明。发送 给一个对象 的消息 定义了一个操 作名 和一个参数表( 可能是空的)并制定某一个对象。当一个对象接收到发 , 给 自己的消息时 , 则调用消息 中制定 的操作 , 并将形式 参数 与参数 表中 的相应的值结合起来。 接收对象对消息处理 可能会改变对象的状态 , 即 改变接收对象的属性 ,并发送一个消息 给 自己或另一 个对象 。可以认 为, 这种消息的传递 大致等价于传统过程性方法 中的函数调用。 为 了把 说 明 与 实现 分 离 ,需 对 对 象 的数 据 结 构 和相 关 操 作 的 实 现 进 行 封 装 , 此 ,对 象 ” 两 个 视 图 , 别表 现 在 设 计 和 实 现 方 面 。 设 因 “ 有 分 从 计方面来看 , 对象是一些概念的实例。它们把有关的实体模型化。 实 从 现方面来看 ,一个对象是表达在应用 的可执行代码 中的实体 而使用 的 实际数据结构。 这些对象是数据结 构与操作 的单一混合体 , 它们是 数据

从面向对象的软件工程_OOSE_进化到面向agent的软件工程_AOSE_

从面向对象的软件工程_OOSE_进化到面向agent的软件工程_AOSE_

从面向对象的软件工程(OOSE)进化到面向agent的软件工程(AOSE)阎 蕾(华北电力大学计算机学院计算机系,河北保定 071003)摘 要:面向agent的软件工程(AOSE),是将agent集成到软件系统中的建模新方法。

它可以应对当前大型的、复杂的、动态的、分布式的、开放的等一些面向对象的软件工程(OOSE)无法解决或是解决起来很困难的软件开发。

AOSE是OOSE的进化。

本文通过讨论agent与对象在编程范例方面的区别,提出由OOSE进化到AOSE的解决方法。

关键词:AOSE;OOSE;软件;编程范例把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合到计算机软件开发和维护中去,这就是软件工程。

软件工程这门学科,与编程范例、计算机软硬件资源等技术的进步密不可分。

普通的软件工程生命周期由需求说明分析、系统设计、编码、测试和交付使用等组成。

面向agent的软件工程(AOSE)被描述为软件工程的一个新的范例。

软件agent是一个具有很强自治性并能和环境进行交互的软件实体。

软件agent的特征包括:自治性:agent是一个位于某一环境的一个计算实体,在没有人或其它软件系统直接干预的情况下,能自主地采取行动,并对自身动作和内部状态有某种控制能力。

社会行为能力:与环境和另外的agen t交互的能力。

预动性:agent主动发出的目标引导的,主动的和自启动的行为。

反应性:感知所处的环境,并能以实时方式响应环境的变化。

移动性:在平台之间移动。

带有这些特征的软件中的agent需要新的编程范例。

本论文讨论在由面向对象方法定义的编程范例中执行agent的可能性。

通过对影响编程范例的方面做与agent和对象的对比研究,得出软件工程的进化和编程范例发展之间的反射关系和面向agent的软件工程的观点。

1.Agent和对象的区别(1)概念上的区别agen t具有自治性,而对象不具有。

如果agent A想让agent B来完成一件事情,A只能请求B,由B自主决定是否采取行动。

软件工程面向对象软件开发方法

软件工程面向对象软件开发方法

软件工程面向对象软件开发方法引言在当前的软件开发领域中,面向对象编程(Object-oriented programming,简称OOP)是一种主要的软件开发方法。

面向对象软件开发方法基于面向对象的程序设计理念,通过将问题分解为对象,并通过对象之间的交互来解决问题。

本文将介绍面向对象软件开发的概念、特性以及在软件工程中的重要性。

面向对象软件开发概述面向对象软件开发是一种以对象为核心的软件开发方法,其中一个对象可以是一个类的实例或一个类本身。

对象在面向对象软件开发中被视为具有状态、行为和标识的实体。

该方法通过将问题分解为对象,并定义对象之间的关系和交互来解决问题。

面向对象软件开发方法有以下几个基本特征:1.封装(Encapsulation):通过封装将数据和相关操作组合在一起,只暴露必要的接口给外部使用。

封装可以使得对象的内部实现对外部不可见,提高了代码的可维护性和安全性。

2.继承(Inheritance):通过继承,在已有类的基础上创建新的类。

继承可以促使代码重用和层次化设计。

3.多态(Polymorphism):多态允许同一操作作用于不同类型的对象上,并产生不同的结果。

这种特性增加了代码的灵活性和可扩展性。

面向对象软件开发方法的优势包括:•提高开发效率:通过封装和抽象的机制,可以更好地管理和组织大型项目的代码,减少开发时间和维护成本。

•提高代码复用性:通过继承和多态的机制,可以避免重复编写相似的代码,提高了代码的复用性和可维护性。

•提高软件的可扩展性:面向对象软件开发方法的灵活性使得系统易于进行修改和扩展,能够快速适应变化的需求和技术。

面向对象软件开发流程面向对象软件开发方法通常包括以下几个主要步骤:在需求分析阶段,软件工程师与客户交流,确保准确理解客户的需求和问题。

通过讨论和分析,确定系统的功能需求、非功能需求和约束条件。

领域建模领域建模是通过抽象和建模来描述问题领域的过程。

通过识别实体、属性和关系,构建领域模型,这些模型将在后续的设计和实现阶段中使用。

软件工程-面向对象分析

软件工程-面向对象分析

第7章面向对象分析•7.1.1 面向对象分析过程面向对象的分析主要以用例模型为基础。

开发人员在收集到的原始需求的基础上,通过构建用例模型从而得到系统的需求。

进而再通过对用例模型的完善,使得需求得到改善。

所谓用例是指系统中的一个功能单元,可以描述为参与者与系统之间的一次交互。

用例常被用来收集用户的需求。

①首先要找到系统的操作者,即用例的参与者。

参与者是在系统之外,透过系统边界与系统进行有意义交互的任何事物。

②可以把参与者执行的每一个系统功能都看作一个用例。

可以说,用例描述了系统的功能,涉及系统为了实现一个功能目标而关联的参与者、对象和行为。

③确定了系统的所有用例之后,就可以开始识别目标系统中的对象和类了。

把具有相似属性和操作的对象定义为一个类。

边界类示意图控制类示意图目标系统的类可以划分为边界类、控制类和实体类。

Ø边界类代表了系统及其操参与者的边界,描述参与者与系统之间的交互。

它更加关注系统的职责,而不是实现职责的具体细节。

通常,界面控制类、系统和设备接口类都属于边界类。

Ø控制类代表了系统的逻辑控制,描述一个用例所具有的事件流的控制行为,实现对用例行为的封装。

通常,可以为每个用例定义一个控制类。

Ø实体类描述了系统中必须存储的信息及相关的行为,通常对应于现实世界中的事物。

确定了系统的类和对象之后,就可以分析类之间的关系了。

对象或类之间的关系有依赖、关联、聚合、组合、泛化和实现。

①依赖关系是“非结构化”的和短暂的关系,表明某个对象会影响另外一个对象的行为或服务。

②关联关系是“结构化”的关系,描述对象之间的连接。

③聚合关系和组合关系是特殊的关联关系,它们强调整体和部分之间的从属性,组合是聚合的一种形式,组合关系对应的整体和部分具有很强的归属关系和一致的生命期。

比如,计算机和显示器就属于聚合关系。

④泛化关系与类间的继承类似。

⑤实现关系是针对类与接口的关系。

明确了对象、类和类之间的层次关系之后,需要进一步识别出对象之间的动态交互行为,即系统响应外部事件或操作的工作过程。

软件工程面向对象方法学概述

软件工程面向对象方法学概述
20前2一1页/1/12
面向对象方法学—优点
(4)可维护性好。 ❖面向对象的软件稳定性好 ❖面向对象的软件比较容易修改 ❖面向对象的软件容易理解 ❖易于测试和调试
13
喷泉模型
▪ 喷泉模型是面向对象软件过程的典型模型 ▪ 采用面向对象方法开发软件时,重点是面
向问题的对象的分析和定义,这个过程是 不断充实和反复迭代的, ▪ “喷泉”体现了面向对象软件开发过程迭 代和无缝的特性
▪ 一个系统应从不同的角度进行描述,从 一个角度观察到的系统称为一个视图 (view)。
新 数据用于表示对象的静态属性,是 途 对象的状态信息。

20前2一1页/1/12
6


面向对象方法学—要点


(3)按照子类(派生类)与父类 (基类)的关系,把若干个对象类组
的 成一个层次结构的系统(类等级)。
新 在这种层次结构中,通常下层的派生

类具有和上层的基类相同的特性(包 括数据和方法),这种现象称为继承
2021/1/12
37
面向对象建模
用面向对象方法开发软件,通常需要建 立三种形式的模型:
• 描述系统数据结构的对象模型 • 描述系统控制结构的动态模型 • 描述系统功能的功能模型
这三个模型从不同的侧面反映了系统的内 容,综合全面地反映了目标系统的需求。
20前2一1页/1/12
38
面向对象建模
用面向对象方法开发软件,在任何 情况下,对象模型始终都是最重要、 最基本、最核心的。
2021/1/12
3
面向对象方法学—要点
▪ 将客观世界遇到的问题与计算机中求解建 立联系
▪ 客观世界中的实体抽象为问题域中的对象 ▪ 计算机中的实体称为解空间对象

面向对象软件工程—课后作业

面向对象软件工程—课后作业

面向对象软件工程第八章8.1.什么是面向对象方法学,它有哪些优点?答:面向对象方法学是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类解决问题的方法与过程,使描述问题的问题空间与实现揭发的解空间在结构上尽可能一致的方法学科。

优点:1、与人类的习惯的思维方法一致;2、稳定性好;3、可重用性好;4、适合用于大型软件产品;5、所开发的软件有较好的可维护性;6、面向对象的软件比较容易修改;7、面向对象软件比较容易理解;8、易于测试和调式。

8.2.什么是对象,它与传统的数据有何异同?答:对象是对问题域中某个实体的抽象。

相对于传统数据的静态被处理,对象既有静态的属性,又有动态的行为,是进行处理的主体。

8.3.什么是类?答:类是对具有相同数据和相同操作的一组相似对象的定义。

8.4.什么是继承?答:继承是指能够直接获得已有事物的性质和特征,而不必重复定义他们。

8.5.什么是模型,开发软件为何要建模?答:所谓模型就是为了理解事物而对该事物做出的一种抽象,是对事物的一种无歧视定义的书面描述。

由于模型忽略了事物的非本质东西,因此模型比原始事物更容易操作。

对于那些因过分复杂而不能直接理解的系统,特别需要建立模型,建模的目的主要是为了降低复杂性。

人的头脑每次只能出来少量信息,模型通过把系统的重要部分分解成人的头脑一次能处理的若干个子部分,从而减少了系统的复杂程度。

8.6.什么是对象模型,建立对象模型时主要使用哪些图形符号,这些符号的含义是什么?答:对象模型表示静态的、结构化的系统性质,是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。

在UML中,用类图来建立对象模型,表示一个类及属于该类的对象。

8.7.什么是动态模型,建立动态模型时主要使用哪些图形符号,这些符号的含义是什么?答:动态模型时描述系统控制结构,即行为化的一种模型。

在UML中主要用状态图、交互图、活动图来建立动态模型。

软件工程面向对象

软件工程面向对象

面向对象软件工程面向对象方法学的提出•结构化软件工程方法学•面向过程、以算法为核心、把数据和过程作为相对独立的部分•对早期只重视编程、不重视用户需求和开发过程,只重视代码、不重视文档来说,是一个巨大的进步•给软件产业带来了巨大的进步,部分缓解了软件危机•在许多中小型软件项目中获得了很大的成功•但是,它存在着明显的缺点•当把这种方法学应用于大型软件产品的开发时,似乎很少取得成功面向对象方法学概述•面向对象方法学的出发点和原则•尽可能模仿人类习惯的思维方式,使软件开发的方法与过程尽可能接近人类认识世界、解决问题的方法与过程•面向对象方法的特点•与人类习惯的思维方法一致:按照人们习惯的思维方式建立模型,模拟客观世界•稳定性好:实体是相对稳定的,以对象为中心构建的软件系统必然是相对稳定的•可重用性好:对象类提供了比较理想的模块化机制和可重用机制•易于开发大型软件:把大型产品看作一系列本质上相互独立的小产品来处理•可维护性好:容易理解、容易修改、易于测试四个要点:对象+类+继承+通信•面向对象软件是由对象组成•软件中的任何元素都是对象•对象是把静态属性的数据和动态属性的操作封装在一起而形成的统一体•复杂对象由简单对象组成•把所有对象都划分成若干类•每个类都定义了一组数据和方法(即施加于对象的操作);•按照子类与父类的关系,把若干个对象类组成一个层次结构的系统(即继承);•对象彼此之间仅能通过传递消息相互联系(对象的私有信息都被封装在对象类中)。

Coad和Yourdon给出了一个定义:面向对象=对象+类+继承+通信基本概念(1)•类(Class)•是对具有相同属性和行为的一(多)个对象的描述•是一个支持继承的抽象数据类型•实例(Instance)•就是由某个特定的类所描述的一个具体的对象•消息(Message)•是要求某个对象执行类中所定义的某个操作的规格说明•其组成为:接收消息的对象、消息名和变元•方法(Method)•就是对象所能执行的操作(类中定义的服务)•属性(Attribute)•就是类中所定义的数据,是对客观世界实体所具有的性质的抽象基本概念(2)•封装•是把数据和实现操作的代码集中起来放在对象内部,不能从外部进行访问和修改。

软件工程 比较结构化方法和面向对象

软件工程 比较结构化方法和面向对象

软件工程一、引言在当今信息技术高速发展的时代,软件的开发和维护变得越来越重要。

为了有效管理软件项目,提高开发效率和质量,软件工程的概念应运而生。

软件工程是一门研究如何按照系统化、规范化、定量化和可重复性的方式开发和维护软件的学科。

在软件工程中,结构化方法和面向对象是两种常用的开发方法。

本文将对结构化方法和面向对象进行比较,并探讨它们在软件工程中的优劣和适用场景。

二、结构化方法2.1 定义和特点结构化方法是一种基于数据流和流程的软件开发方法。

它将软件系统视为一系列逐步细化的模块,通过分析数据流和流程来设计和实现软件系统。

结构化方法强调模块化、层次化和自顶向下的设计思想,以确保程序逻辑清晰、易于理解和修改。

2.2 优点1.结构化方法强调模块化,将软件系统分解为多个模块,每个模块负责特定的功能。

这种模块化的设计使得程序易于理解、修改和测试,提高了软件的可维护性和可测试性。

2.结构化方法采用自顶向下的设计思想,先设计系统的总体框架,再逐步细化到具体的模块。

这种逐步细化的设计方式使得开发过程更加可控,项目管理更加容易。

同时,自顶向下的设计过程也便于团队协作和分工。

3.结构化方法将程序逻辑分解为一系列有序的步骤,每个步骤都有明确的输入和输出。

这种严格的输入输出规定使得程序的设计和测试更加方便。

4.结构化方法在软件开发初期就明确定义了数据流和流程,使得开发人员能够更好地理解和掌握软件系统的整体架构,从而减少了项目失败的风险。

2.3 缺点1.结构化方法的设计过程较为复杂,需要详细分析系统的数据流和流程。

对于较大规模的软件系统,分析和设计的工作量较大,容易导致项目开发周期延长。

2.结构化方法强调模块化,但对于一些复杂的问题,模块化的设计可能不够灵活和强大。

这就需要在设计阶段尽可能考虑全部的需求和功能,否则可能会在后期的修改过程中遇到困难。

三、面向对象3.1 定义和特点面向对象是一种以对象为基础的软件开发方法。

在面向对象方法中,软件系统由一组相互作用的对象组成。

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

B.CSample(); public: C.CSample(int val); D.~ CSample(); } [解析]在下面对类“CSample”说明 中,“CSample()”和“CSample(int val)”是该类重载的构造函 数、“~ CSample()”是该类的析构函数,这三个语句都是正确的。错 误的语句是“int a=23”,因为它违反了在类的声明(不管是引用性声 明,还是定义性声明)中都不能以赋值表达式的形式给它的数据成员进 行初始化。 5.已知类A中的一个成员函数的说明如下: void Set(A &a); 则该函数的参数“A &a”的含义是 参考答案为:C A.指向A的指针为a B.将变量a的地址赋给类A C.类A对象引用a用作函数的形参 D.变量A与a按位与后作函数参数 [解析]因为A是一个类,所以“A &a”表示a是类A的对象,但因为 对象a的前缀了符号“&”,则“&a”表示是类A的对象引用。所以“A &a”的含义是类A对象引用a用作函数的形参。 6.若类A和类B的定义如下: class A { public: int i,j; void get(); }; class B:A { int i,j; protected: int k; public: void make(); }; void B::make() { k=i*j; } 则其中()是非法的表达式。 参考答案为:D A.void get(); B.int k; C.void make();
____________操作符。 答:作用域、作用域分辨符 [解析]C++的作用域规则能隐式地保证编译器调用正确的成员函 数。为清楚地显式地保证编译器调用正确的成员函数,可以使用作用域 分辨操作符::,使用“类名::成员函数”来说明该成员函数属于哪 个类。 17.说明一个const成员函数(又称常量成员函数)的方法是,将 const写在__________之间,而且它修饰的是__________。 答:函数头与函数体、this指针 [解析]为了说明一个常量成员函数的方法是,将const写在函数头 的右圆括号‘)’与函数体的左花括号‘{’之间,而且它修饰的是对 象所属的this指针。表示该函数不能修改它所在对象中的数据成员的 值。 18.除析构函数外,不能带有参数的函数还有____________,而且 它的返回数据类型不能随便指定,而由____________来决定。 答:类型转换函数、return语句中返回变量的类型 [解析]除析构函数外,不能带有参数的函数还有类型转换函数,类 型转换函数的返回数据类型是不能随便指定的,必须由return语句中返 回变量的类型来决定。 19.当使用new动态生成一个对象时,隐含着对____________的一 次调用;而当使用delete删除一个对象时,隐含着对____________的一 次调用。 答:构造函数、析构函数 [解析]当使用new动态生成一个对象时,隐含着对构造函数的一次 调用,用来生成对象;而当使用delete删除一个对象时,隐含着对析构 函数的一次调用,以析构需删除的对象。 20.对某个运算符的重载,实际上是用关键字____________与该运 算符组成一个运算符函数,而且该运算符函数的返回类型不能是 ____________的。 答:operater、void [解析]对某个运算符的重载,实际上是用关键字operater 与该运 算符组成一个运算符函数,而且该运算符函数的返回类型不能是无类型 的,即不能是void的。 三,改错题(本大题共5小题,每小题2分,共10分) 21.分析下列程序中的错误,并说明出错原因。 # include class base { const int n; public:
D.k=i*j; [解析]对于给定的四项中,前三项都是正确的,只有第四项是错误 的。因为,类B是类A的私有派生类(缺省访问类型),所以A中的公类 型的数据成员在类B中成为了私有数据成员,但函数“void B::make()”既然是类B的成员函数,则既可访问类A中的公有数据成 员,也能访问类B中的私有数据成员,则表达式“k=i*j;”造成了访问 的二义性,即其中的i和j,到底是取自类A呢?还是取自类B呢? 7.下面的主程序中,语句( )是错误的。 class A { int i; public: virtual void fun()=0; A(int a) { i=a; } }; class B { int j; public: void fun() { cout<<”B::fun()\n”; } B(int b,int c) :A(b) { j=c; } }; void main() 参考答案为:A A.{ A a(5); B.A *pa; C.B b(7); D.B *pb; } [解析]在类A中,函数“virtual void fun()=0”为纯虚函数,因 此,类A为抽象类。作为抽象类,它是不能被用来定义具体对象的,而 语句“A a(5);”恰恰是定义抽象类的对象的,所以它是错误的 8.拷贝(复制)构造函数的作用是 参考答案为:C A.进行数据类型的转换 B.用对象调用成员函数 C.用对象初始化对象 D.用一般类型的数据初始化对象 [解析]进行数据类型的转换和用一般类型的数据初始化对象都是一 般构造函数的功能。用对象调用成员函数不用构造函数,只要用“对象 名.成员函数名”即可。所以拷贝(复制)构造函数的作用,只能是用 对象来初始化对象。 9.下列说法中,正确的说法是 参考答案为:B
பைடு நூலகம்
A.所有的运算符都能被重载 B.运算符被重载时,它们的优先级与结合性不会改变 C.当需要时,我们可以自定义一个运算符来进行重载 D.每个运算符都可以被重载成成员函数和友元函数 [解析]当重载运算符时,不是所有的运算符都能被重载,有几个运 算符是不能被重载的,如三元运算 符“?:”、‘.’、‘*’、‘::’、‘#’等;也不是每个运算符 都可以被重载成成员函数和友元函数,如运算 符‘=’、‘()’、‘[]’、和‘→’都只能被重载成成员函数;无 论何时,都不能自定义运算符来进行重载,也即重载只能对已有运算符 进行;但是运算符被重载时,它们的优先级与结合性不会改变。 10.下面对结构或类中成员的访问中,不正确的访问是 参考 答案为:A A.*pointer.salary; (其中pointer为指向类对象的指针) B.pointer->salary; C.x=worker.salary; (其中worker为具有类类型的对象) D.Location &rA=A1;int x=rA.GetX(); (Location为已定义的 类,A为对象) [解析]因pointer为指向类对象的指针,所以“pointer>salary”是正确的访问数据成员的形式;因worker为具有类类型的对 象,所以“worker.salary”也是正确的访问数据成员的形式;因 Location为已定义的类,A1为对象,所以“Location &rA=A1;int x=rA.GetX();”表示以对象A1初始化对象引用rA,然后由对象引用rA 调用成员函数GetX()给变量x赋值,这样的访问成员函数的形式也是正 确的;“*pointer.salary;”中,因为运算符‘.’的优先级高于运算 符‘*’的优先级,所以相当于“*(pointer.salary);”,那正确的 形式应该是“*(pointer→salary);”。故“*pointer.salary”是不 正确的访问。 二,填空题(本大题共10小题,共20分) 不写解答过程,将正确的答案写在每小题的空格内。错填或不 填均无分。 11.面向对象程序设计中的多态性包括静态多态性和动态多态性, 前者由____________机制支持,而后者则由____________机制支持。 答:函数重载、虚函数 [解析]静态多态性又称编译时多态性,调用何函数应该在编译之前 就知道了,所以必须由函数重载机制来支持。动态多态性又称运行时多 态性,调用何函数只有在运行时才知道,所以由虚函数(与指针或引 用)机制来支持。 12.由char const *str=”stucture”;所以定义的指针称为
一、单项选择题(本大题共10小题,共20分) 在每小题列出的四个选项中,只有一个是符合题目要求的,请 将其代码填在题后的括号内。错选或未选均无分。 单项选择题(本大题共20小题,每小题1分,共20分) 1.面向对 象程序设计中的数据隐藏指的是 参考答案为:D A.输入数据必须输入保密口令 B.数据经过加密处理 C. 对象内部数据结构上建有防火墙 D.对象内部数据结构的不可访问性 [解析]输入数据必须输入保密口令和数据经过加密处理都不是面向 对象程序设计的特征;对象内部数据结构上也不可能建有防火墙,所以 它们都不是面向对象程序设计中所指的数据隐藏。面向对象程序设计系 统中的封装单位是对象,对象之间只能通过接口进行信息交流,外部不 能对对象中的数据随意地进行访问,这就造成了对象内部数据结构的不 可访问性,也使得数据被隐藏在对象中。这就是面向对象程序设计中的 数据隐藏所指。 2.下列各项中不符合函数重载必须满足的条件的是 参考答 案为:D A. 必须有不同的参数个数 B.对应的参数类型必须不相同 C. A和B必须同时满足 D.A和B只要满足一个即可 [解析]我们知道,在同一个作用域中,要实现函数重载必须满足的 条件的是:① 有不同的参数个数;或者 ② 对应的参数有不相同的数 据类型,即①和②中只要有一个满足就可以了。当然两者都满足更好, 但这不是必须的。 3.下列带缺省值参数的函数说明中,正确的说明是 参考答 案为:A A.int Fun(int x,int y=2,int z=3); B.int Fun(int x=1,int y,int z=3); C. int Fun(int x,int y=2,int z); D.int Fun(int x=1,int y,int z=3); [解析]在带缺省值参数的函数说明中,正确的说明应该是无缺省值 的参数依次排列在参数表的左边,排完无缺省值的参数后,再依次排列 带缺省值的参数。从所给出的四个选项来看,只有“int Fun(int x,int y=2,int z=3)”符合这条规定,其它的都不符合。 4.有如下的对类“CSample”的说明,其中( )是错误的。 class CSample { 参考答案为:A A.int a=23;
相关文档
最新文档