第11章复习及习题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int getb(){return b; }
};
class C:virtual public A{
int c;
public:
C(int x=2,int y=2):A(y){ c=x; }
int getc(){return c; }
};
class D:public B,public C{
public:
D 一个派生类是从两个基类派生出来的,而这两个基
类又有一个共同的基类,对该基类成员进行访问时,
可能出现二义性
18.设置虚基类的目的是
。
A 简化程序
B 消除二义性
C 提高运行效率
D 减少目标代码
19.下列虚基类的声明中,正确的是
。
A class virtual B:public A
B virtual class B:public A
};
class B:public A{
int b;
public:
B(int x=0,int y=0):A(y){b=x; }
};
则下列语句组中出现语法错误的是:
A A *pa=new B(1,2);
B A a1=B(1,3);
C B b1(2,3);A *pa1=&b1;
D A a2(10);B b2=a2;
9.多继承情况下,派生类的构造函数的执行顺序取决
于 定义 派生类时所指定的各基类的顺序。
10.多继承可以视为是 单继承 的扩展。
11.如果类 Alpha 继承了类 Beta,则类 Alpha 称为 派
生
,类 Beta 称为 基 类。
12.C++提供的 多继承 机制允许一个派生类继承多
个基类,即使这些基类是相互无关的。
public:
void fun2(){cout<<a<<'\n';}
};
void main()
{
B b1;
//A 行
b1.fun1(); //B 行
b1.a=10;
//C 行
b1.fun2(); //D 行
}
28.设有如下类的定义:
class A{
int a;
public:
A(int x=0){ a=x; }
D(int x=5,int y=6,int z=7):A(x),B(y),C(z)
{
}
void print()
{cout<<geta()<<'\t'<<getb()<<'\t'<<getc()<<
'\n'; }
};
void main()
{
D d1;
d1.print();
}
程序运行后输出为
。
A0 1 2
直接派生类继承方式
基类中成员类型
Public Private proected
public private protected
15 . 构 造 函 数 不 能 被 继 承 , 析 构 函 数
不能被继承。
16.对于派生类的构造函数,在定义对象时构造函数的
执行顺序为:先执行 基类 ,再执行 子
对象 ,最后执行 派生类 。
。
A pa=&b1 B pb=&c1 C pc=&a1 D pa=&c1
二、填空题
1.类之间的“有”关系代表 聚集
,“是”关
系代表 继承
。
2.派生类对基类的继承有三种方式: 公有继
承
、 私有继承
和 保护继
承
。
3.派生类可以调用其 基类
中不具备的数据和操
作。
4.继承是 对象 的一个特点,继承支持
类概念。
B 私有Байду номын сангаас员
C 私有成员函数
D 保护成员函数
10.派生类的对象对它的基类成员中
是可以
访问的。
A 公有继承的公有成员 B 公有继承的私有成员
C 公有继承的保护成员 D 私有继承的公有成员
11.下列说法错误的是
。
A 公有继承时基类中的 public 成员在派生中中仍是
public 的
B 公有继承时基类中的 private 成员在派生中中仍是
protected 的
C 基类的 protected 成员在 public 派生类中仍然是
private 的
D 基类的 protected 成员不能被派生类的对象访问
13.下面叙述错误的是
。
A 对基类成员的访问能力在 private 派生类中和
public 派生类中是相同的
B 基类的 private 成员在 public 派生类中不可访问
基类的成员。
A 规律性
B 传递性
C 重复性
D 多样性
4.
A
提供了类对外部的接口,
是类的内部实现,而
BD
不允许外界
访问,但允许派生类的成员访问,这样既有一定的
隐藏能力,又提供了开放的接口。
A 公有成员
B 私有成员
C 私有成员函数
D 保护成员
5.下列对基类和派生类关系的描述中,错误的
是
。
A 派生类是基类的具体化
是
、
和
。
20 . 在 派 生 类 中 使 用 基 类 的 成 员 , 可 以 显 示 地 使 用
C 派生类的对象可以初始化基类的引用
D 派生类的对象的地址可以赋值给指向基类的指
针
25. 下面叙述错误的是
。
A 派生类可以使用 private 派生
B 对基类成员的访问必须是无二义性的
C 基类成员的访问能力在派生类中维持不变
D 赋值兼容规则也适用于多继承的组合
26.下列程序中,划线处正确的语句是
。
#include <iostream.h>
C Base::fun(); D Base->fun()
27.下列程序中,出现编译错误的是
。
#include <iostream.h>
class A{
protected:
int a;
public:
A(int x=0){a=x;}
void fun1(){cout<<a<<'\n';}
};
class B:public A{
其基类中所有公有成员在派生类中也都是公有的。
A 公有派生 B 派生类的实例
C 私有派生 D 派生类的构造函数
9.基类的 B 不能为派生类的成员访问,基类的 A
在派生类中的性质和继承的性质一样,基类的 D
在私有继承时在派生类中成为私有成员函数,在公
有和保护继承时在派生类中仍为保护成员函数。
A 公有成员
B0 1 1
C0 2 2
D5 6 7
30.设有如下类的定义:
class A{
public:
int a,b;
};
class B{
public:
int a,b;
};
class C:public A,public B{
public:
int a;
};
下列对于类 C 的对象 c1 的成员的访问中,产生二义性
的是
17.对基类数据成员的初始化必须在派生类构造函数中
的 成员初始化列表 处执行。
18.当撒消一个含有基类和子对象成员的派生类对象
时,将首先完成
的析构函数定义体的执
行,接着完成
的析构函数定义体的执
行,最后完成
的析构函数定义体的执
行。
19.
继承情况下,派生类中对基类成员的访
问会出现二义性。解决二义性的方法
这 4 个步骤的正确顺序是
。
A ④③①②
B ②④③①
C ②①③④
D ③④①②
17.关于多继承二义性的描述中,错误的是
。
A 一个派生类的两个基类中都有某个同名成员,在派
生类中对这个成员的访问可能出现二义性
B 解决二义性的最常用的方法是对成员名的限定法
C 基类和派生类中同时出现的同名函数,也存在二义
性问题
29.设有如下多重继承示例程序:
#include <iostream.h>
class A{
int a;
public:
A(int x=0){a=x; }
int geta(){return a; }
};
class B:virtual public A{
int b;
public:
B(int x=1,int y=1):A(y){b=x; }
第十一章 习题和补充练习题
一、 选择题
1.C++语言建立类族是通过
实现的。
A 类的嵌套
B 虚函数
C 类的继承
D 抽象类
2.C++中的类有两种用法:一种是类的实例化,即生成
类的对象,并参与系统的运行;另一种是通过
派生出新的类。
A 复用 B 继承 C 封装 D 引用
3.继承具有
,即当基类本身也是某一
个类的派生类时,底层的派生类也会自动继承间接
含
。
A 基类的构造函数
B 派生类中子对象的初始化
C 基类中子对象的初始化
D 派生类中一般数据成员的初始化
16.多继承的构造顺序可分为如下 4 步:
① 所有非虚基类的构造函数按照它们被继承的顺序
构造;
② 所有虚基类的构造函数按照它们被继承的顺序构
造;
③ 所有子对象的构造函数按照它们声明的顺序构造;
④ 派生类自己的构造函数体。
13.利用继承能够实现 软件复用,这种实现缩短了
程序的开必时间,促使开发人员复用已经测试和调
试好的高质量软件。
14.请填写间接派生类成员对基类成员的可见性。
public private protected
Public
可见 不可见 可见
Private 不可见 不可见 不可见
protected 可见 不可见 可见
C 基类中的 public 成员在 protected 派生类中是
protected 的
D 基类中的 public 成员在 protected 派生类中仍然是
public 的
14.C++类体系中,不能被派生类继承的有
。
A 构造函数
B 虚函数
C 静态成员函数
D 赋值操作函数
15.派生类的构造函数的成员初始化列表中,不能包
化列表中都要列出对虚基类构造函数的调用
23.下列关于子类型的描述中,错误的是
。
A 子类型关系是可逆的
B 公有派生类的对象可以初始化基类的引用
C 只有在公有继承下,派生类是基类的子类型
D 子类型关系是可传递的
24.下面
的叙述不符合赋值兼容规则。
A 派生类的对象可以赋值给基类的对象
B 基类的对象可以赋值给派生类的对象
B 派生类是基类的子集
C 派生类是基类定义的延续
D 派生类是基类的组合
6.下列对派生类的描述中,错误的是
。
A 一个派生类可以作为另一个派生类的基类
B 派生类至少有一个基类
C 派生类的缺省继承方式是 private
D 派生类只继承了基类的公有成员和保护成员
7.下列关于继承的描述,错误的是
。
A 析构函数不能被继承
B 派生类是基类的组合
C 派生类的成员除了它自己的成员外,还包括
了它的基类的成员
D 派生类中继承的基类成员的访问权限到派
生类保持不变
8.派生类可以分为 A 和 C 。由 C 得到
的派生类,其基类的所有公有成员都只能成为它的
私有成员,这些私有成员只能被派生类的成员函数
访问,而 B 无权访问;由 A 得到的派生类,
。
A c1.a B c1.b C c1.A::a D c1.A::b
31.设有如下类的定义及对象、指针变量等说明:
class A{ ……
};
class B:public A{…… };
class C:public B{…… };
A a1,*pa;
B b1,*pb;
C c1,*pc;
则如下赋值存在语法错误的是:
class Base
{
public:
void fun(){cout<<"Base::fun"<<endl;}
};
class Derived:public Base
{
void fun()
{
//显式
调用基类的函数 fun()
cout<<"Derived::fun"<<endl;
}
};
A fun();
B Base.fun();
5.类继承中,缺省的继承方式是 私有继承 。
6.垂直访问时,保护成员的访问控制权限与 公有 成 员相同。
7.若类 Y 是类 X 的私有派生类,类 Z 是类 Y 的派生类, 则类 Z 不能 访问类 X 的保护成员与公有成员。
8.当用 protected 继承从基类派生一个类时,基类
public 成员成为派生类的 protected 成员, protected 成员成为派生类的 protected 成员。
private 的
C 私有继承时基类中的 public 成员在派生中中仍是
private 的
D 保护继承时基类中的 public 成员在派生中中仍是
protected 的
12.下面的叙述错误的是
。
A 基 类 的 protected 成 员 在 派 生 类 中 仍 然 是
protected 的
B 基类的 protected 成员在 public 派生类中仍然是
C class B:public A virtual
D class B:virtual public A
20.带有虚基类的多层派生类构造函数的成员初始化列
表中都要列出虚基类的构造函数,这样将对虚基类
的子对象初始化
。
A 与虚基类下面的派生类个数有关 B 多次
C 两次
D 一次
21.在下面的表达式中,不表示虚继承的是
。
A virtual public B public virtual
C public
D virtual
22.下列关于虚基类的描述中,错误的是
。
A 虚基类子对象的初始化由最派生类完成
B 虚基类子对象的初始化次数与虚基类下面的派
生类个数有关
C 设置虚基类的目的是消除二义性
D 带有虚基类的多层派生类构造函数的成员初始