C++程序设计(第二版_吴乃陵_况迎辉)课后答案(6)

2019-01-07 13:07

第四章 类与对象习题 第四章 类与对象习题

1

一. 基本概念与基础知识自测题 4.1 填空题

5.1.1 引入类定义的关键字是 (1) 。类的成员函数通常指定为 (2) ,类的 数据成员通常指定为 (3) 。指定为 (4) 的类成员可以在类对象所在域 中的任何位置访问它们。通常用类的 (5) 成员表示类的属性,用类的 (6) 成员表示类的操作。 答案:

(1) class (2) 公有的 public (3) 私有的 private (4) 公有的 public (5) 数据 (6) 函数

4.1.2 类的访问限定符包括 (1) 、 (2) 和 (3) 。私有数据通常由

(4) 函数来访问(读和写)。这些函数统称为 (5) 。 答案: (1) public(公有的) (2) private(私有的) (3) protected(保护的) (4) 公有的成员函数 (5) 类的接口

4.1.3 通常在逻辑上,同一类的每个对象都有 (1) 代码区,用以存储成

员函数。而 在物理上通常只有 (2) 代码区。只有在 (3) 定义,并 (4) 的 函数和加了关键字 (5) 的函数例外。 答案:

(1) 独立的 (2) 共用的

(3) 在类说明中

(4) 不包括循环等复杂结构 (5) inline

4.1.4 C++中支持三种域: (1) 、 (2) 、 (3) 。函数域被包括在

(4) 中,全局域被包括在 (5) 中。using指示符以关键字using开头,后面 是关键字 (6) ,最后是 (7) 。这样表示以后在该名字空间中所有成员都 (8) 。如不使用using指示符则在使用时要加::,称为 (9) 运算符。 答案:

(1) 局部域(local scope)

(2) 名字空间域(namespace scope) (3) 类域(class scope) (4) 局部域

(5) 名字空间域 (6) namespace (7) 名字空间名

第四章 类与对象习题 2

(8) 可以直接被使用 (9) 域

4.1.5 引用通常用作函数的 (1) 和 (2) 。对数组只能引用 (3)不能引用 (4) 。 答案:

(1) 参数 (2) 返回值 (3) 数组元素 (4) 数组名本身

4.1.6 构造函数的任务是 (1) 。构造函数无 (2) 。

类中可以有 (3) 个构造函数,它们由 (4) 区分。如果类说明中没有给出构造函数,则C++编译 器会 (5) 。拷贝构造函数的参数是 (6) ,当程序没有给出复制构造函 数时,系统会自动提供 (7) 支持,这样的复制构造函数中每个类成员 (8) 。 答案:

(1) 初始化数据成员 (2) 函数返回类型说明 (3) 多

(4) 不同的参数表

(5) 自动给出一个默认的构造函数 (6) 同一类对象的引用

(7) 默认的的复制构造函,称为默认的按成员语义支持。 (8) 被依次复制

4.1.7 一个类有 (1) 个析构函数。 (2) 时,系统会自动调用析构函数。 答案: (1) 一

(2) 对象注销时

4.1.8 运算符重载时,其函数名由 (1) 构成。成员函数重载双目运算符时,

左操作 数是 (2) ,右操作数是 (3) 。 答案:

(1) 关键字 operator 和该运算符 (2) 对象

(3) 该函数的参数

4.1.9 面向过程的程序设计中程序模型描述为 (1) ,面向对象程序设计的程

序模型可描 述为 (2) 。 答案: (1)“程序=算法+数据结构”。其数据与数据处理是分离的。

(2)程序=(对象+对象+……+对象)+消息;对象=(算法+数据结构)。面向对象

设计将数 据和对数据的操作方法放在一起,形成一个相对独立的整体——对象(Object),并通 过简单的接口与外部联系。对象之间通过消息(Message)进行通讯。

4.2 简答题

4.2.1 简单解释什么是面向对象程序设计的封装性。 答:对象是一个封装体,在其中封装了该对象所具有的属性和操作。对象作为独立的基本单 元,实现了将数据和数据处理相结合的思想。此外,封装特性还体现在

可以限制对象中数据

第四章 类与对象习题 3

和操作的访问权限,从而将属性“隐藏”在对象内部,对外只呈现一定的外部特性和功能。

封装性增加了对象的独立性,C++通过建立数据类型——类,来支持封装和数据隐藏。 一个定义完好的类一旦建立,就可看成完全的封装体,作为一个整体单元使用,用户不需要 知道这个类是如何工作的,而只需要知道如何使用就行。另一方面,封装增加了数据的可靠 性,保护类中的数据不被类以外的程序随意使用。这两个优点十分有利于程序的调试和维护。

4.2.2 C++编译器怎样对标识符进行解析? 答:编译器对标识符的解析分两步,第一步查找在声明中用到的标识符,特别是函数成员声 明中用到的参数类型,第二步是函数成员体内的标识符。

4.2.3 为什么说类与对象的概念是客观世界的反映? 答:客观世界的事物都具有某些属性和行为(或操作),具有相同属性和行为的事物可以归 属于一类,用分类的方法可以提高认识事物的效率。C++中定义的类则是通过抽象的方法将 某一类事物共有的静态特征(属性)和动态特征(行为)概括出来并加以描述,而对象是类 的具体实现,所以说类与对象的概念是客观世界的反映。

4.2.4 什么叫类域?为什么说类域是抽象的? 答:类域是类体所包括的范围。每个类定义都引入了一个独立的类域,在类域中说明的标识 符仅在该类的类域中有效。由于类只是一个说明,看上去有数据,有函数,有类型定义,但 是它并非实体,不分配内存,当然也不能运行。所以说类域是抽象的。

4.2.5 引用作为函数参数时为什么能实现两个实参之间的数据交换?为什么对应实参不能 为引用?为什么返回值为引用的函数可以作为左值? 答:引用变量是其关联变量的别名,二者在内存中占据同一个存储单元。在一个以引用作为 参数的函数中,交换两个参数的值,实际上就是交换两个实参的值。如果函数的参数是引用, 调用时需要取得实参的地址,而实参如果已经是一个地址,再进行引用将产生错误,故对应 实参不能为引用。

函数返回引用实际是指明(返回)了相应的关联变量,所以声明返回值为引用的函数实

际上是将关联变量作为左值参与运算。

4.2.6 什么是缺省的构造函数?缺省的构造函数最多可以有多少个? 答:如果在类定义中不显式地定义构造函数,C++编译器会自动产生一个缺省的构造函数, 不过该函数不做具体的初始化工作。只要构造函数是无参的或者只要各参数均有缺省值的, C++编译器都认为是缺省的构造函数。缺省的构造函数只能有一个。 4.2.7 拷贝构造函数用于哪三个方面? 答:

(1) 用类的一个对象去初始化该类的另一个对象时使用。

(2) 当函数的形参是类的对象,调用函数时,进行形参与实参结合时使用。 (3) 当函数的返回值是类对象,函数执行结束返回调用者时使用。 4.2.8 写出含有对象成员的类的构造函数的格式,并做简单说明。 答:C++中对含对象成员的类对象的构造函数有固定的格式: 类名::构造函数名(参数总表):对象成员 1(参数名表 1),对象成员 2(参数名表 2),……对象成

第四章 类与对象习题 4

员 n(参数名表 n){……}

冒号后用逗号隔开的是要初始化的对象成员,附在后面的参数名表 1,…,参数名表 n 依次 为调用相应对象成员所属的构造函数时的实参表。这些表中的参数通常来自冒号前的参数总 表,但没有类型名。

4.2.9 所有类对象未重载的赋值运算符“=”是怎样工作的?为什么它可以进行连续赋值? 答:对所有的类对象,未重载的赋值运算符“ =”称作缺省的按成员拷贝赋值操作符,同类 对象之间可以用“=”直接拷贝。因为缺省的赋值操作返回一个对象的引用,所以它可以进 行连续赋值。

4.2.10 为什么在友元函数的函数体内访问对象成员时,必须用对象名加运算符“.”再加对 象成员名? 答:友元函数不是类的成员函数,在函数体中访问对象的成员,必须用对象名加运算符“.” 加对象成员名。这一点和一般函数一样。 4.2.11 重载复数运算符+时,采用下面友元函数声明: friend

Complex operator+(Complex &c1,Complex &c2); 为什么不能用于“实数+复数”?怎样改进才能适用?为什么? 答:使用引用类型变量作为运算符重载函数的参数,身为左值的实数类型实参不能被转换为 复数,编译时无法通过。添加 const 说明,使实数到复数的转换隐式地在一份拷贝上进行, 则可以实现“实数+复数”运算。修改后的说明为:

friend Complex operator+(const Complex &c1, const Complex &c2); 4.2.12 类的静态数据成员与函数中的静态成员有何异同? 答:类的静态成员为其所有对象共享,不管有多少对象,静态成员只有一份存于公用内存中, 为该类所有对象公用。函数中的静态变量也位于公用内存中,不随函数调用而重新分配,所 以总是保留上次进入并执行该函数后留下的信息。

4.2.13 C++中结构、联合与类三者间有何异同? 答:在 C++中结构(structure)与类几乎是完全一样的类型,差别仅仅在于缺省情况下结构 的成员为公有的。联合(union)是 C++的导出数据类型,在语法与功能上类似于结构,二 者的区别是:结构变量的各成员同时被分配了各自独立的内存区,而联合变量的各个成员的 存储开始地址都相同,所以在任一时刻联合变量只能存储一个成员。

4.2.14 对象的第一特征是封装,那么由对象组成的面向对象的程序怎样建立各对象之间的 有效联系?面向对象程序的组织与面向过程有什么不同? 答:因为对象的操作主要用来响应外来消息并为其他对象提供服务,所以面向对象的程序利 用消息传递机制来建立各对象之间的有效联系,协调各对象的运行。一个对象可以向其他对 象发送消息以请求服务,也可以响应其他对象传来的消息,完成自身固有的某些操作,从而 服务于其他对象。

面向过程的程序是模块化的,模块的组织具有分层结构特点,层与层之间是调用关系。

面向对象程序是由一个个封装的对象组成,而对象是由紧密结合在一起的算法和数据结构组 成。对象之间是相互请求和相互协作的关系。


C++程序设计(第二版_吴乃陵_况迎辉)课后答案(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2014年7月《设计原理》试卷Doc1

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: