第07章 继承和派生
(1) (2) (3) (4)
面向对象程序设计的____机制实现了代码重用,有效地缩短了程序的开发周期。 在继承关系中,被继承的类称为____,通过继承关系定义出来的新类称为_____。 派生类的继承方式有____ ,____ 和____3种,其中默认的继承方式为____.。
公有继承时,基类的私有成员为跑生类的____成员,基类的保护成员成为派生类的____成员,基类的公有成员成为派生类的____成员。
在派生类中不能访问基类的____成员,这符合面向对象程序设计的封装思想。 C++语言不仅支持____继承,也支持____继承。
可以把派生类的对象当做基类对象来处理,这是____的概念。 根据联编实现的不同极端,可将其分为____联编和____联编两种。 声明了纯虚函数的类,称为____。
(5) (6) (7) (8) (9)
2.选择题
(1)下列关于派生类的描述中,不正确的是()
A)派生类的成员除了包含它自己的成员的访问权限在派生类中保持不变 B)派生类中继承的基类
C)派生类至少有个一个基类
D)一个派生类可以作为另一个派生的基类
(2)在保护继承中,基类的私有成员变成派生类的()
A)不可访问成员 B)稀有成员 C)保护成员 D)公有成员 (3)若有如下类声明: Class Base { int k; Public:
Void set(int n){k=n;} Int get()const{return k;} };
Class Derived:protected Base {protected: Int j; Public: Void set(int m,int n) { Base::set(m); j=n; }
Int get()const
{ return Base::get()+j; } };
则类Derived中保护的数据成员和成员函数的个数是() A)4 B)3 C)2 D)1
(4)在派生类的结构函数的初始化表中,不能包含()
A)基类的构造函数 B)派生类的一般数据成员的初始化 C)基类的子对象的初始化 D)派生类的子对象的初始化 (5)若如下类声明: Class X { int x; Public:
X(int n){x=n;} };
Class Y:public X { int y; Public; Y(int a,int b); };
在构造函数Y的下列定义中,正确的是() A)Y::Y(int a,int b):x(a),y(b){} B)Y::Y(int a,int b):X(a),y(b){} C) Y::Y(int a,int b):x(a),Y(b){} D)Y::y(INT A,INT B):X(a),Y(b){}
(6)在多重继承中,对于基类成员在派生类中的访问权限与单继承的规矩() A)完全相同 B)完全不同 C)部分相同 D)以上均不正确 (7)下列说法中不正确的是()
A)私有继承时,基类的公有成在派生中是私有成员 B)保护继承时,基类的公有成在派生中是保护成员 C)私有继承时,基类的公有成在派生中是公有成员 D)私有继承时,基类的私有成在派生中是私有成员 (8)下列关于赋值兼容规则的描述中不正确的是() A)派生类的对象可以赋值给基类对象 B)基类的对象可以赋值给派生的对象
C)派生类的对象可以初始化为基类的引用
D)派生类对象的地址可以赋值个指向基类的指针 (9)下列关于虚类的描述中,不正确的是() A)使用虚基类的目的是消除多重继承下的二义性
B)虚基类中的子对象的初始化次数与该虚基类的派生类的个数有关
C)虚基类的多层派生类结构函数的成员初始化列表中都要列出对虚基类构造函数 的调用
(10)运行时的多态性上指()
A)用指向对象的基类指针或引用调用一个纯虚函数 B)用指向对象的基类指针或用调用一个虚函数 C)以任何方式调用一个纯虚函数 D)以任何方式调用一个虚函数
(11)在C++中,用于现实运行时多态性的是() A)内联函数 B)重载函数 C)摸板函数 D)虚函数 (12)下列关于虚函数的描述中,正确的是() A)从虚基类继承的函数都是虚函数 B)虚函数不得是静态成员函数 B)只能通过指针或引用调用虚函数 D)抽象类中的成员函数都虚函数
3. (1)
#include
Int al; Protected: Int a2; Private:
Int a3; };
Class B:publicA {public:
Int b1; proteted:
Int b2; Private:
Int b3; };
Void B::fb()
{ a1=10;a2=20a3=30:
B1=100;b2=100;b3=100; }
Void main() { A x;
B y;
x.a1=10;x.a2=20,x.a3=30; y.a1=100;y.a2=200;y.a3=300; y.b1=1000;y.b2=2000;y.b3=3000; } (2)
#include
Void funl() con
4. 读程序写结果
5.简答题
(1)派出类的继承方式有哪几种?各种继承方式各有什么特点?
(2)在继承方式的派出类构造函数中如何对基类的数据成员初始化?各构造函数被调用的顺序和机理是什么?请举例说明。
(3)什么是虚基类?它的作用是什么?
(4)什么是抽象类?抽象类的主要作用是什么?
6.编程题
(1) 分别定义一个日期类和时间类,然后派生出一个新的日期时间类。请以继承方式实现
该类。
(2) 在例7-16 胡基础上,由 Student 类和 Teacher 类派生出一个描述在职读书的教师的
类,并编写出相对应的测试代码。
(3) 设计一个抽象类,并由它派生出圆柱体、球体和正方体3个类,实现计算圆柱体、球
体和正方体表面积和体积;要求按照运行时多态性的方法设计主函数,进行测试。
习题参考答案
第1章
1.填空题
C++语言概述
(1)函数说明,函数体
(2)声明区,主程序区,函数定义区 (3)多态性
(4)namespace,using (5)std (6)cin,>> (7)//
(8)对数据的操作 2.判断题 (1)对 3.改错题
(1)没有函数体,应改为 void main() {};
(2)语句没有分号,应改为 using namespace myspace;
(3)cout和操作符<<共同完成输出的功能,应改为 cout<<\
(2)错 (3)错 (4)错 (5)错
(4)应改为
#include
(略) (略)
第2章
1. 选择题
基本数据类型、运算符与表达式
(1)B (2)D (3)B (4)D (5)B 2.简答题
(1)(a)、(c)(e)、(f)、(g)、(h)、(i) (2)(a)、(g)、(i)、(j) (3) (a)5.5 (b)0 (c)20 (d)0,0 (e)1 (f)1,2 (g)3 (h)-40 (i)2 (j)3
(k)s1>='0'&&s1<='9' (l)N!=0 3.读程序写结果
(1)0,15 (2)(1、1、1),(-1、-1、-1) (3)
(a)a*a+2*a*b+b*b
(b)4.0/3.0*3.1415926*R*R*R (c)5.0/9.0*(F-32) (d)b>=a&&b<=c (4)
36 41 43
(5)
x=1 4.编程题
(略)