![](https://csdnimg.cn/release/download_crawler_static/86246910/bg1.jpg)
1.概念填空题
1.1 在 C++中,三种派生方式的说明符号为 public(公有继承) 、 private(私有继承) 、 protected(保护
继承) 不加说明,则默认的派生方式为 private(私有继承) 。
1.2 当公有派生时,基类的公有成员成为派生类的 公有成员 ;保护成员成为派生类的 保护成员
;私有成员成为派生类的 不可访问对象 。
当保护派生时,基类的公有成员成为派生类的 保护成员 ;保护成员成为派生类的 保护成
员 ;私有成员成为派生类的 不可访问对象
1.3 派生类的构造函数一般有 3 项工作要完成:首先 基类初始化 ,其次 成员对象初始化 ,
最后 派生类的构造函数初始化 。
1.4 多继承时,多个基类中的同名的成员在派生类中由于标识符不唯一而出现 二义性 。在派生类中采用
作用域分辨符 或 虚基类 来消除该问题。
2.简答题
2.1 派生类如何实现对基类私有成员的访问?
答:用友元函数,友元函数可以打破类的封装。
2.2 什么是类型兼容规则?
答:在需要基类对象的任何地方,都可以使用公有派生类来代替基类。通过公有继承,派生类得到了
基类中除构造函数,析构函数之外的所有成员。这样,公有派生类实际就具备了基类的所有功能,凡是基
类能解决的问题,公有派生类都可以解决。
2.3 派生类的构造函数是怎样的执行顺序,析构函数的执行顺序是如何实现的?
答:Frist,调用基类构造函数,然后按照基类成员在类声明出现的顺序对这些成员进行初始化,然后,
调用派生构造函数,析构函数的执行顺序与构造函数相反。虚基类的对象优先被构造。
2.4 继承与组合之间的区别与联系是什么?
答:继承是面向对象的三大基本特征之一,继承就是子类继承父类的特征和行为,使得子类对象具有
父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为,继承强调的是 is-a 的关系,
继承是代码复用的一种方式,在继承中,父类方法的内部实现细节对子类可见,是白盒式的方法复用。组
合是通过对现有对象进行拼装即组合产生新的具有更复杂的功能,组合体现的是整体和部分,强调的是
has—a 的关系,而组合中,对象之间的内部细节不可见,是黑盒式复用。继承在编码过程中就要指定具体
的父类,其关系在编译期就确定,和组合的关系一般在运行期时确定。
2.5 什么是虚基类?它有什么作用?含有虚基类的派生类的构造函数有什么要求,什么是最远派生类,
建立一个含有虚基类的派生类的对象时,为什么由最远派生类的构造函数负责虚基类的初始化?
答:当在多余基础路径上有一个公共的基类,在这些路径的某几条汇合处,这个公共的基类就会产生
多个实例,若只想保存这个基类的一个实例,可以将这个公共基类说明问派生类。含有虚基类的派生类构
造函数,如果虚基类的构造函数是默认或者缺省构造函数那么后面的派生类则无需对虚基类的构造函数调
用了,需要注意的是如果虚基类中没有默认构造函数,或者中间的派生类采用的不是默认构造函数或者有
参数,那么在所有的派生类中都必须要有虚基类构造函数的说明。因为只有最远派生类对虚基类的构造函
数使用有效,之后的都是无效的,而且构造函数只能被调用一次。
3.选择题
3.1 下面对派生类的描述中,错误的是(D )。
A.一个派生类可以作为另外一个派生类的基类 B.派生类至少有一个基类
C.派生类的成员除了它自己的成员外,还包含了它的基类的成员 D.派生类中继承的基类成员的访问
权限到派生类中保持不变
3.2 下列对友元关系叙述正确的是(A)。
A.不能继承 B.是类与类的关系
C.是一个类的成员函数与另一个类的关系 D.提高程序的运行效率