VisualC面向对象程序设计教程与实验第二版清华大学出版社18章答案.docx
《VisualC面向对象程序设计教程与实验第二版清华大学出版社18章答案.docx》由会员分享,可在线阅读,更多相关《VisualC面向对象程序设计教程与实验第二版清华大学出版社18章答案.docx(56页珍藏版)》请在三一文库上搜索。
1、第一章1. 什么是面向 象程序 ?它与 的 构化程序 有什么不同?面向 象程序 既吸取了 构化程序 的一切 点, 又考 了 世界与面向 象解空 的映射关系, 它所追求的目 是将 世界的 求解尽可能 化。面向 象程序 将数据及 数据的操作放在一起, 作 一个相互依存、 不可分割的整体来 理, 它采用了数据抽象和信息 藏技 。 它将 象及 象的操作抽象成一种新的数据 型 , 并且考 不同 象之 的 系和 象所在 的重要性。面向 象程序 于 的 构化程序 ,其 越性表 在, 它有希望解决 件工程的两个主要的 件复 性控制和 件生 率的提高, 此外它 符合人 的思 , 能 自然地表 世界的 体和 ,
2、它 件开 程具有重要的意 。在面向 象程序 中可以用下面的式子表示程序:程序 = 象 + 象 + 象 象 =算法 +数据 构 +程序 言 + 言 境在 构化程序 中可以用下面的式子表示程序:程序 =数据 构 +算法 +程序 言 + 言 境2. 面向 象程序 言有哪几 ?(1) LISP家族LISP 是 50 年代开 出来的一种 言,它以表 理 特色,是一种人工智能 言, 70 年代以来,在 LISP 基 上开 了很多 LISP 家族的面向 象 言。(2) SimulaSimula 言是 60 年代开 出来的,在Simula 中引入了几个面向 象程序 言中最重要的概念和特性,即数据抽象、 和 承
3、性机制。Simula67 是它具有代表性的一个版本,70 年代 展起来的CLU, Ada,Modula-2 等 言是在它的基础上发展起来的。(3) SmalltalkSmalltalk是第一个真正的面向对象程序设计语言,它体现了纯粹的OOP设计思想,是最纯的 OOP语言。它起源于 Simula 语言。尽管 Smalltalk不断完善,但在那个时期, 面向对象程序设计语言并没有得到广泛的重视,程序设计的主流是结构化程序设计。(4) C 家族在 19 世纪 80 年代, C 语言成为一种极其流行、应用非常广泛的语言。 C+ 是在 C语言的基础上进行扩充, 并增加了类似 Smalltalk 语言中相
4、应的对象机制。它将“类”看作是用户定义类型,使其扩充比较自然。 C+以其高效的执行效率赢得了广大程序设计员的青睐,在 C+中提供了对 C语言的兼容性,因此,很多已有的 C程序稍加改造甚至不加改造就可以重用, 许多有效的算法也可以重新利用。它是一种混合型的面向对象程序设计语言,由于它的出现,才使面向对象的程序设计语言越来越得到重视和广泛的应用。JAVA 语言是一种适用于分布式计算的新型面向对象程序设计语言,可以看作是 C+语言的派生,它从C+语言中继承了大量的语言成分,抛弃了C+语言中冗余的、容易引起问题的功能,增加了多线程、异常处理、网络程序设计等方面的支持,掌握了 C+语言,可以很快学会 J
5、AVA 语言。3. 面向对象系统有哪些特性?分别加以解释。(1) 抽象性( abstract )抽象是一种从一般的观点看待事物的方法, 它要求程序员集中于事物的本质特征,而不是具体细节或具体实现。 类的概念来自人们认识自然、 认识社会的过程。在这一过程中, 人们主要使用两种方法: 从特殊到一般的归纳法和从一般到特殊的演绎法。 在归纳的过程中, 我们从一个个具体的事物中把共同的特征抽取出来,形成一个一般的概念,这就是“归类” ;在演绎的过程中,我们又把同类的事物,根据不同的特征分成不同的小类,这就是“分类” 。对于一个具体的类,它有许多具体的个体,我们称这些个体叫做“对象” 。(2)封装性( e
6、ncapsulation)所谓数据封装就是指一组数据和与这组数据有关的操作集合组装在一起,形成一个能动的实体, 也就是对象。数据封装就是给数据提供了与外界联系的标准接口,无论是谁,只有通过这些接口,使用规范的方式,才能访问这些数据。数据封装是软件工程发展的必然产物,使得程序员在设计程序时可以专注于自己的对象,同时也切断了不同模块之间数据的非法使用,减少了出错的可能性。(3)继承性( inheritance)从已有的对象类型出发建立一种新的对象类型,使它继承原对象的特点和功能,这种思想是面向对象设计方法的主要贡献。继承是对许多问题中分层特性的一种自然描述, 因而也是类的具体化和被重新利用的一种手
7、段,它所表达的就是一种对象类之间的相交关系。 它使得某类对象可以继承另外一类对象的特征和能力。继承所具有的作用有两个方面:一方面可以减少代码冗余;另一方面可以通过协调性来减少相互之间的接口和界面。(4) 多态性 (polymorphism)不同的对象接收到相同的消息时产生多种完全不同的行为的现象称为多态性。 C+语言支持两种多态性即编译时的多态性和运行时的多态性。编译时的多态性通过重载函数实现, 而运行时的多态性通过虚函数实现。使用多态性可以大大提高了我们解决复杂问题的能力。4. 解释类、对象、消息和方法的概念。(1) 类 (class)在面向对象系统中,并不是将各个具体的对象都进行描述,而是
8、忽略其非本质的特性,找出其共性,将对象划分成不同的类,这一过程为抽象过程。类是对象的抽象及描述,是具有共同属性和操作的多个对象的相似特性的统一描述体。在类的描述中,每个类要有一个名字标识, 用以表示一组对象的共同特征。类中的每个对象都是该类的实例。类提供了完整的解决特定问题的能力,因为类描述了数据结构(对象属性)、算法(服务、方法)和外部接口(消息协议) ,是一种用户自定义的数据类型。(2)对象( object )在面向对象系统中,对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。 一个对象由一组属性和对这组属性进行操作的一组服务构成。属性和服务是构成对象的两个主要因素,属性
9、是一组数据机构的集合,表示对象的一种状态,对象的状态只供对象自身使用,用来描述静态特性,而服务是用来描述对象动态特征(行为)的一个操作序列,是对象一组功能的体现。对象是类的实例。(3)消息 (message)消息是面向对象系统中实现对象间的通信和请求任务的操作,是要求某个对象执行其中某个功能操作的规格说明。发送消息的对象称为发送者,接受消息的对象称为接收者。对象间的联系,只能通过消息来进行。对象在接收到消息时才被激活。(4)方法( method)在面向对象程序设计中,要求某一对象做某一操作时,就向对象发送一个相应的消息,当对象接收到发向它的消息时,就调用有关的方法,执行相应的操作。方法就是对象
10、所能执行的操作。 方法包括界面和方法体两部分。方法的界面就是消息的模式,它给出了方法的调用协议;方法体则是实现某种操作的一系列计算步骤,也就是一段程序。消息和方法的关系是:对象根据接收到的消息,调用相应的方法;反过来,有了方法,对象才能响应相应的消息。所以消息模式与方法界面应该是一致的。同时,只要方法界面保持不变,方法体的改动不会影响方法的调用。在C+语言中方法是通过函数来实现的,称为成员函数。第二章1分析下列程序的执行结果:输出随机数2. 分析下列程序的执行结果: i=03. C+ 语言对 C语言在结构化程序设计方面进行了哪些扩充?主要在以下方面进行了扩充:文件扩展名、注释符、名字空间、输入
11、输出、变量的定义、强制类型转换、动态 内存 的分配与释放、作用域运算符 : 、引用、 const 修饰符、字符串、函数4. 下述 C+程序有若干处错误,试找出并纠正之。正确程序为:#includeconst float PAI=3.14159265;float square(float r)return PAI*r*r;float square(float high,float length=0 )return high*length;float (*fs)(float,float=0);void main()fs=□coutThe circles square is fs(1.
12、0)n;5. 引用类型与指针类型有什么区别?指针的内容或值是某一变量的内存单元地址,而引用则与初始化它的变量具有相同的内存单元地址。指针是个变量,可以把它再赋值成其它的地址,然而,建立引用时必须进行初始化并且决不会再指向其它不同的变量。C+没有提供访问引用本身地址的方法,因为它与指针或其它变量的地址不同,它没有任何意义。 引用总是作为变量的别名使用,引用的地址也就是变量的地址。引用一旦初始化,就不会与初始化它的变量分开。6函数、内联函数以及宏的区别。程序的模块在 C+中通过函数来实现, 函数由函数说明和函数体2 部分组成。内联函数是C+语言特有的一种函数附加类别,是通过在函数声明之前插入“ i
13、nline ”关键字实现的。 编译器会将编译后的全部内联函数的目的机器代码复制到程序内所有的引用位置并把往返传送的数据也都溶合进引用位置的计算当中,用来避免函数调用机制所带来的开销, 提高程序的执行效率。 显然这是以增加程序代码空间为代价换来的。宏定义是编译预处理命令,分为带参数的和不带参数的宏定义。在编译之前进行预处理时,用宏定义中的字符串替换程序中所有出现的宏名。7. 函数重载有什么好处?函数重载使函数方便使用,便于记忆,也使程序设计更加灵活,增加程序的可读性。例如,求两个数中最大值的函数max,不管其参数是整数类型、实数类型、字符串,都可以使用同名函数来实现,调用时只需使用max就可以了
14、编译器将根据实参的类型判断应该调用哪一个函数。8. 模板有什么作用?函数模板和模板函数有什么区别?所谓模板是一种使用无类型参数来产生一系列函数或类的机制,是C+的一个重要特征。通过模板可以产生类或函数的集合,使它们操作不同的数据类型,从而避免为每一种数据类型产生一个单独的类或函数。函数模板提供了传递类型的机制。函数模板定义不是一个实实在在的函数,编译系统不为其产生任何执行代码。该定义只是对函数的描述, 表示它每次能单独处理在类型形式参数表中说明的数据类型。函数模板只是说明,不能直接执行,需要实例化为模板函数后才能执行。当编译系统发现有一个函数调用:;时,将根据 中的类型生成一个重载函数,即模
15、板函数。该模板函数的定义体与函数模板的函数定义体相同,而的类型则以 的实际类型为依据。第三章1 为什么要引入构造函数和析构函数?对象的初始化是指对象数据成员的初始化,在使用对象前, 一定要初始化。 由于数据成员一般为私有的(private),所以不能直接赋值。对对象初始化有以下两种方法:类中提供一个普通成员函数来初始化,但是会造成使用上的不便(使用对象前必须显式调用该函数)和不安全( 未调用初始化函数就使用对象) 。当定义对象时,编译程序自动调用构造函数。析构函数的功能是当对象被撤消时,释放该对象占用的内存空间。析构函数的作用与构造函数正好相反,一般情况下,析构函数执行构造函数的逆操作。在对象
16、消亡时,系统将自动调用析构函数,执行一些在对象撤消前必须执行的清理任务。2. 类的公有、私有和保护成员之间的区别是什么? 私有成员 private: 私有成员是在类中被隐藏的部分,它往往是用来描述该类对象属性的一些数据成员, 私有成员只能由本类的成员函数或某些特殊说明的函数(如第 4 章讲到的友员函数)访问,而类的外部根本就无法访问,实现了访问权限的有效控制,使数据得到有效的保护,有利于数据的隐藏, 使内部数据不能被任意的访问和修改, 也不会对该类以外的其余部分造成影响, 使模块之间的相互作用被降低到最小。 private 成员若处于类声明中的第一部分,可省略关键字 private 。 公有成
17、员 public :公有成员对外是完全开放的,公有成员一般是成员函数,它提供了外部程序与类的接口功能,用户通过公有成员访问该类对象中的数据。 保护成员 protected:只能由该类的成员函数,友元,公有派生类成员函数访问的成员。 保护成员与私有成员在一般情况下含义相同,它们的区别体现在类的继承中对产生的新类的影响不同,具体内容将在第5 章中介绍。缺省访问控制(未指定 private 、protected 、public访问权限)时,系统认为是私有 private成员。3. 什么是拷贝构造函数,它何时被调用?拷贝构造函数的功能是用一个已有的对象来初始化一个被创建的同类对象,是一种特殊的构造函数
18、 具有一般构造函数的所有特性,当创建一个新对象时系统自动调用它; 其形参是本类对象的引用, 它的特殊功能是将参数代表的对象逐域拷贝到新创建的对象中。在以下四种情况下系统会自动调用拷贝构造函数: 用类的一个对象去初始化另一个对象cat cat1;cat cat2(cat1); /创建 cat2时系统自动调用拷贝构造函数,/ 用 cat1 初始化 cat2 。 用类的一个对象去初始化另一个对象时的另外一种形式Cat cat2=cat1;/注意并非 cat cat1,cat2; cat2=cat1; 对象作为函数参数传递时,调用拷贝构造函数。f(cat a) /定义 f 函数,形参为 cat 类对
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VisualC 面向 对象 程序设计 教程 实验 第二 清华大学出版社 18 答案
