ITEEDU

自测练习

9.1 填空

a)如果类Alpha继承了类Beta,则类Alpha称为——类,类Beta称为——类。

b)C++提供的——机制允许一个派生类继承多个基类,即使这些基类是相互无关的。

c)利用继承能够实现——。这种实现缩短了程序的开发时间,促使开发人员复用已经测试和调试好的高质量软件。

d)——类的对象可作为——类的对象处理。

e)为了将基类指针转换为派生类指针,由于编译器认为这种操作是危险的,所以要使用——。

f)三种成员访问说明符分别是——、——和——。

g)当用public继承从基类派生一个类时,基类的public成员成为派生类的——成员, protected成员成为派生类的——成员。

h)当用protected继承从基类派生一个类时,基类的public成员成为派生类的——成员,基类的protected成员成为派生类的——成员。

i)类之间的“有”关系代表——,“是”关系表示——。

自测练习答案

9.1 a)派生、基。

b)多重继承。

c)软件复用。

d)派生、基。

e)强制类型转换。

f)public、protected、private。

g)public、protected。

h)protected、proected。

i)复合、继承。

练 习

9.2 考虑类Bicycle,根据你对自行车通用组件的了解,描述类Bicycle继承其他类(这些类还可以再继承其他类)的层次结构。讨论类Bicycle的各种对象的实例以及其他紧密相关的派生类对类Bicycle的继承性。

9.3 简要地定义下列术语:继承、多重继承、基类、派生类。

9.4 为什么编译器认为把基类指针转换为派生类指针是危险的

9.5 区分单一继承与多重继承。

9.6(判断对错)派生类通常称为子类,因为它表示基类的子集,即派生类通常比基类更小。

9.7(判断对错)派生类对象也是其基类的对象。

9.8 有些程序员不喜欢用protected访问,因为它会破坏基类的封装。试讨论使用Protected访问与坚持在基类中使用private访问的利与弊。

9.9 许多带继承的程序可以改用复合,反过来也成立。试讨论这两种方法在本章Point、Circle、Cylinder类继承中的利弊。将图9.10(及其支持类)改写为使用复合而不用继承。然后重新评估这两种方法对Point、Circle、Cylinder问题和一般面向对象程序的利弊。

9.10 将图9.10的Point、Circle、Cylinder程序改写为Point、SqUare、Cube程序。用两种方法,一种用继承,一种用复合。

9.11 本章曾经指出,“基类成员不适合派生类时,可以在派生类中重定义该成员的实现方法”。如果这样,“派生类对象是基类对象”的关系是否仍然成立为什么。

9.12 研究图9.2的继承层次。对每个类,指出该层次中的共同属性与行为。并增加一些类以丰富这个层次(如UndergraduateStudent、GraduateStudent、Freshman、Sophomore、Junior、Senior等等)。

9.13写出Quadrilateral、Trapezoid、Parallelogram、Rectangle和Square类的继承层次。用Quadrilateral作为这个层次的基类。让层次尽量深(尽量多层)。Quadrilateral的private数据为Quadrilateral四角的(x,y)坐标对。编写一个驱动程序,实例化和显示这些类的对象。

9.14 试写出所能想到的所有形状(包括二维的和三维的),并生成一个形状层次结构。生成的层次结构要以Shape作为基类,并由此派生出类TwoDimensionalShape和ThreeDimesionalShape。开发出层次结构后,定义其中的每一个类。第10章的练习要用这个层次结构处理作为基类Shape的对象的所有形状,这种技术叫做多态性。