C++程序设计习题答案第八章
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八章继承与多态习题
一.基本概念与基础知识自测题
8.1填空题
8.1.1 如果类α继承了类β,则类α称为(1)类,而类β称为(2)类。(3)类
的对象可作为(4)类的对象处理,反过来不行,因为(5)。如果强制转换则要注意(6)。
答案:(1)基类
(2)派生类
(3)派生类
(4)基类
(5)派生类有一些新成员
(6)只能派生类强制转换为基类
8.1.2 当用public继承从基类派生一个类时,基类的public成员成为派生类的(1)成员,
protected成员成为派生类的(2)成员,对private成员是(3)。公有派生可以使其类的(4),所以公有派生是主流。
答案:(1)public成员
(2)protected成员
(3)不可访问
(4)接口不变
8.1.3 利用继承能够实现(1)。这种实现缩短了程序开发的时间,VC++中的(2)很
好地体现了这一点。
答案:(1)代码的复用
(2)MFC编程
8.1.4 一个派生类只有一个直接基类的情况称为(1),而有多个直接基类的情况称为
(2)。继承体现了类的(3)概念,这在MFC中得到了很好表现,MFC中只采用了(4)。
答案:(1)单继承
(2)多重继承
(3)层次
(4)单继承
8.1.5 C++中多态性包括两种多态性:(1)和(2)。前者是通过(3)实现的,
而后者是通过(4)和(5)来实现的。
答案:(1)编译时的
(2)运行时的
(3)函数和运算符的重载
(4)类继承关系
(5)虚函数
8.1.6 在基类中将一个成员函数说明成虚函数后,在其派生类中只要(1)、(2)和
(3)完全一样就认为是虚函数,而不必再加关键字(4)。如有任何不同,则认为是(5)而不是虚函数。除了非成员函数不能作为虚函数外,(6)、(7)和(8)也不能作为虚函数。
答案:(1)同虚函数名
(2)同参数表
(3)同返回类型。如基类中返回基类指针,而派生类中返回派生类指针是允许的
(4)virtual
(5)重载
(6)静态成员函数
(7)内联函数
(8)构造函数
8.1.7 纯虚函数定义时在函数参数表后加(1),它表明程序员对函数(2),其本质
是将指向函数体的指针定为(3)。
答案:(1)=0
(2)不定义
(3)NULL
8.2简答题
8.2.1构造函数和析构函数可以继承吗?派生类构造函数各部分的执行次序是怎样的?答:构造函数和析构函数不可以继承。派生类构造函数各部分的执行次序是:
1.调用基类构造函数,按它们在派生类声明的先后顺序,依次调用。
2.调用新增成员对象的构造函数,按它们在类定义中声明的先后顺序,依次调用。
3.派生类的构造函数体中的操作。
8.2.2什么叫派生类的同名覆盖(override)?
答:如果派生类声明了一个和某个基类成员同名的新成员(当然如是成员函数,参数表也必须一样,否则是重载),派生类中的新成员就屏蔽了基类同名成员,类似函数中的局部变量屏蔽全局变量。称为同名覆盖(override)。
8.2.3派生类的析构函数中需完成什么任务?是否要编写对基数和成员对象的析构函数的
调用?为什么?
答:析构函数的功能是作善后工作,析构函数无返回类型也没有参数,情况比较简单。派生类析构函数定义格式与非派生类无任何差异,不要编写对基数和成员对象的析构函数的调用,只要在函数体内把派生类新增一般成员处理好就可以了,因为对新增的成员对象和基类的善后工作,系统会自己调用成员对象和基类的析构函数来完成。
8.2.4为什么要使用虚基类?怎样定义虚基类?用一个实例来解释虚基类在其派生类中的
存储方式。
答:在多重继承是有可能出现同一基类的两个拷贝,为避免这种情况,可使用虚基类。虚基类(virtual base class)定义方式如下:
class派生类名:virtual 访问限定符基类类名{...};
class派生类名:访问限定符virtual基类类名{...};
virtual 关键字只对紧随其后的基类名起作用。
如下派生: class Person
int No
身份证号
……class Student
int No
学生号
……class GStudent
int No
研究生号
……class Person int No 身份证号……
class Employee int No 工作证号……
class EGStudent
int No
在职学号
……
(a )派生关系Person 成员Student 新成员
GStudent 新成员
Person 成员Employee 新成员EGStudent 新成员Person Student Person Employee GStudent EGStudent (b )存储图
存储关系如(b),在职研究生类有两个Person 拷贝。采用虚基类后存储关系如下:
在职研究生类只有一个Person 拷贝。
8.2.5 简单叙述派生类与基类的赋值兼容规则。
答:凡是基类所能解决的问题,公有派生类都可以解决。在任何需要基类对象的地方都可以
采用虚基类后在职研究生类储存图
Student GStudent
EGStudent Person
Student 新成员 GStudent 新成员
Person Employee 新成员
Person 成员 EGStudent 新成员
Person Person Employe