1、国家二级 C+机试(继承和派生)模拟试卷 12及答案与解析 一、选择题 1 有如下类声明: class XA int x; public: XA(int n)x=n; ; class XB: public XA int y; public: XB(int a,int b); ; 在构造函数 XB的下列定义中,正确的是 ( )。 ( A) XB: XB(int a, int b): x(a), y(b) ( B) XB: XB(int a, int b): XA(a), y(b) ( C) XB: XB(int a, int b): x(a), XB(b) ( D) XB: XB(int a,
2、int b)iXA(a), XB(b) 2 有如下程序: #include iostream using namespace std; class BASE public: BASE()cout BASE; ; class DERiVED: public BASE public: DERIVED()tout DERiVED; ; int main()DERIVED x; return 0; 执行后的输出结果是 ( )。 ( A) BASE ( B) DERIVED ( C) BASEDERlJVED ( D) DERIVEDBASE 3 下列有关继承和派生的叙述中,正确的是 ( )。 ( A)
3、如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员 ( B)派生类的成员函数可以访 问基类的所有成员 ( C)基类对象可以赋值给派生类对象 ( D)如果派生类没有实现基类的一个纯虚函数,则该派生类是一个描象类 4 下列有关类继承的叙述中,错误的是 ( )。 ( A)继承可以实现软件复用 ( B)虚基类可以解决由多继承产生的二义性问题 ( C)派生类构造函数要负责调用基类的构造函数 ( D)派生类没有继承基类的私有成员 5 在下列关键字中,不能用来表示继承方式的是 ( )。 ( A) private ( B) static ( C) public ( D) protected 6
4、 在类声明中,紧跟在 “public: ”后声明的成员的访问权限是 ( )。 ( A)私有 ( B)公有 ( C)保护 ( D)默认 7 定义派生类时,若不使用关键字显式地规定采用何种继承方式,则默认方式为( )。 ( A)私有继承 ( B)非私有继承 ( C)保护继承 ( D)公有继承 8 有如下类定义: class XX int xx; public: XX(): xx(0)cout A; XX(int n): xx(n)cout B; ; class YY: public XX int yy; public: YY(): yy(0)cout yy; YY(int n): XX(n+1),
5、 yy(n)cout yy; YY(int m, int n): XX(m), yy(n)cout yy; ; 下列选项中,输出结果为 A0的语句是 ( )。 ( A) YY y1(0, 0); ( B) YY y2(1); ( C) YY y3(0); ( D) YY y4; 9 有如下类定义: class XX int xdata; public: XX(int n=0): xdata(n) ; class YY: public XX int ydata; public: YY(int m=0, int n=0): XX(m), ydata(n) ; YY类的对象包含的数据成员的个数是 (
6、 )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 10 下列关于继承方式的描述中,错误 的是 ( )。 ( A)如果不显式地指定继承方式,缺省的继承方式是私有 (private) ( B)采用公有继承方式时,基类中的公有成员在派生类中仍是公有成员 ( C)采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员 ( D)采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员 11 下列代码段声明了 3个类 class Person; class Student: public Person; class Undergraduate: Student; 下列关于这些类之间
7、关系的描述中,错误的是 ( )。 ( A)类 Person是类 Undergraduate的基类 ( B)类 Undergraduate从类 student公有继承 ( C)类 student是类 Person的派生类 ( D)类 Undergraduate是类 Person的派生类 12 下列关于基类和派生类关系的叙述中,正确的是 ( )。 ( A)每个类最多只能有一个直接基类 ( B)派生类中的成员可以访问基类中的任何成员 ( C)基类的构造函数必须在派生类的构造函数体中调用 ( D)派生类除了继承基类的成员,还可以定义新的成员 13 若已定义了类 Vehicle,则下列派生类定义中,错误
8、的是 ( )。 ( A) class Car: vehicle *类体略 * ; ( B) class Car: public car *类体略 * ( C) class Car: public Vehicle *类体略 * ); ( D) class Car: virtual Public Vehicle *类体略 * ); 14 下列描述中,错误的是 ( )。 ( A)公有继承时基类中的公有成员 在派生类中仍是公有成员 ( B)公有继承时基类中的保护成员在派生类中仍是保护成员 ( C)保护继承时基类中的公有成员在派生类中仍是公有成员 ( D)保护继承时基类中的保护成员在派生类中仍是保护成员
9、 - 15 当派生类继承一个基类时,默认的继承方式为 ( )。 ( A) Public ( B) protected ( C) private ( D)不确定 16 下列关于派生类的叙述中,错误的是 ( )。 ( A)派生类至少要有一个基类 ( B)派生类中包括了从基类继承的成员 ( C)一个派生类可以作为 另一个派生类的基类 ( D)基类成员被派生类继承以后访问权限保持不变 17 有如下类声明: class MyBASE int k; public: void set(int n)k=n; int getoconstreturn k; ; class MyDERIVED: protected
10、 MyBASE protected: int j; public: void set(int m, int n)MyBASE: set(m); j=n; int get()constreturn MyBASE: get()+j; ; 则类 MyDERIVED中保护的数据成员和成员函数的个数是 ( )。 ( A) 4 ( B) 3 ( C) 2 ( D) 1 18 有如下程序: #include iostream using namespace std; class Base public: void fun()cout Base: fun endl; ; class Derived: publ
11、ic Base public: void fun() _ cout Derived: fun end1; ; int main() Derived d; d fun(); return 0; 已知其执行后的输出结果为: Base: fun Derived: fun 则程序中下划线处应填入的语句是 ( )。 ( A) Base fun(); ( B) Base: fun(); ( C) Base- fun(); ( D) fun(); 19 有如下程序: #include iostream using namespace std; class Base private: void fun1()
12、constcout fun1; protected: void fun2() constcout fun2; public: void fun3() constcout fun3; ; class Derived: protected Base public: void fun4()constcout fun4“; ; int main() Derived obj; obj funl(); obj fura(); obj fun3(); obj fun4(); return 0; 其中有语法错误的语句是 ( )。 ( A) ( B) ( C) ( D) 20 在公有继承的情况下,允许派生类直接
13、访问的基类成员包括 ( )。 ( A)公有成员 ( B)公有成员和保护成员 ( C)公有成员、保护成员和私有成员 ( D)保护成员 21 有如下类定义: class MyBase int k; public: MyBase(int n=0): k(n) int value()constreturn k; ; class MyDerived: MyBase intj; public: MyDerived(int i): j(i) int getK()constreturn k; int getJ()constreturn j; ; 编译时发现有一处语法错误,对这个错误最准 确的描述是 ( )。
14、( A)函数 getK试图访问基类的私有成员变量 k ( B)在类 MyDerived的定义中,基类名 MyBase前缺少关键字 public、 protected或 private ( C)类 MyDerived缺少一个无参的构造函数 ( D)类 MyDerived的构造函数没有对基类数据成员 k进行初始化 22 派生类的成员函数不能访问基类的 ( )。 ( A)公有成员和保护成员 ( B)公有成员 ( C)私有成员 ( D)保护成员 23 若有如下类定义: class B void fun1() protected: double varl; public: void fun2() ; c
15、lass D: public B protected: void fun3() ; 已知 obj是类 D的对象,下列句中不违反类成员访问控制权限的是 ( )。 ( A) obj fun1(); ( B) obj var1 ( C) obj fun2(); ( D) obj fun3(); 24 有如下 类声明: class Base protected; int amount; public; Base(int n=0): amount(n) int getAmount()constreturn amount; ; class。 Derived: public Base protected;
16、int value; public; Derived(int m, int n): value(m) Base(n) Int getData()constreturn value+amount; ; 已知 x是一个 Derived对象,则下列表达式中正确的是 ( )。 ( A) x value+x getAmount() ( B) x getData()-x gctAmount() ( C) x getData() x amount ( D) X value+x amount 25 在一个派生类的成员函数中,试图调用其基类的成员函数 “void f(); ,但无法通过编译。这说明 ( )。 (
17、 A) f()是基类的私有成员 ( B) f()是基类的保护成员 ( C)派生类的继承方式为私有 ( D)派生类的继承方式为保护 26 对于通过公有继承定义的派生类,若其成员函数可以直接访问基类的某个成员,说明该基类成员的访问权限是 ( )。 ( A)公有或私有 ( B)私有 ( C)保护或私有 ( D)公有或保护 国家二级 C+机试(继承和派生)模拟试卷 12答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 此题考查的是派生类中构造函数的定义。派生类的构造首先要调用基类的构 造函数,对基类成员初始化;然后对派生类中的新增成员初始化。格式为:派生类名 (构造函数形参表 )基类构造函数
18、 (形参表 )。 【知识模块】 继承和派生 2 【正确答案】 D 【试题解析】 此题考查的是派生类的定义和使用。当对象被删除时,派生类的析构函数就被执行。由于析构函数不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。 【知识模块】 继承和派生 3 【正确答案】 D 【试 题解析】 此题考查的是继承和派生。无论是哪种继承方式,派生类都能够访问基类的公有和保护成员,而不能访问基类的私有成员,故选项 A和 B错误;公有继承时,基类的对象不可作为派生类的对象处理,即基类对象不可赋值给派生类对象
19、,所以选项 C错误。 【知识模块】 继承和派生 4 【正确答案】 D 【试题解析】 此题考查的是类继承。派生类继承了基类的 (全部数据成员,私有成员 ),只是基类的私有成员在派生类中是隐藏的,只能在基类内部访问,故选项D错误。 【知识模块】 继承和派生 5 【正确答案】 B 【试题解析】 此题考查的是继承方式。继承方式有私有 (private)、保护(protected)、公有 (public)三种。 【知识模块】 继承和派生 6 【正确答案】 B 【试题解析】 类中提供了 3种访问控制的权限:公有,私有和保护。其中公有类型定义了类的外部接口,任何一个外部的访问都必须通过外部接口进行。私有类型
20、的成员只允许本类的成员函数访问,来自类外部的任何访问都是非法的,保护类型介于公有类型和私有类型之间,在继承和派生时可以体现出其特点。 【知识模块】 继承和派生 7 【正确答案】 A 【试题解析】 继承的方式包括三种:公有继承,保护继承和私有继承。如果不显示的给出继承方式,缺省的类继承方式是私有继承 private。 【知识模块】 继承和派生 8 【正确答案】 D 【试题解析】 考查的是类的继承。选项 A的执行结果为 B0,建立 YY的对象y1,首先调用其构造函数, YY继承于 XX所以先调用的为 XX的构造函数,根据输入的参数可知输出 B,然后执行 YY的构造函数输出 0;同理,选项 B的执行
21、结果为 Bl,选项 C的执行结果为 B0。 【知识模块】 继承和派生 9 【正确答案】 B 【试题解析】 因为类 XX包括一个数据成员 xdata,而类 YY继承自类 XX,所在类 YY中也包含数据成员 xdata,同时类 YY中也定义了其本身的数据成员ydata,因而 YY类的对象包含的数据成员的个数是 2。 【知识模块】 继承和派生 10 【正确答案】 D 【试题解析】 基类中的私有成员在派生类中是隐蔽的,只能在基类内部访问。派生类中的成员不可以访问基类中的私有成员,只可以访问基类中的公有成员和保护成员。 【知识模块】 继承和派生 11 【正确答案】 B 【试题解析】 Student类公有
22、继承自 Person类, Undergraduate类私有继承自Student类。所以 Undergraduate类是从 Student类私有继承的。 【知识模块】 继承和派生 12 【正确答案】 D 【试题解析】 继承分为单继承和多继承,一个类只有一个直接基类时,称为单继承;而一个类同时有多个直接基类时,则称为多继承。派生类的数据成员由所有基类的的数据成员与派生类新增的数据成员共同组成。 【知识模块】 继承和派生 13 【正确答案】 B 【试题解 析】 类 Car不能派生自它本身。 【知识模块】 继承和派生 14 【正确答案】 C 【试题解析】 保护继承时基类中的公有成员在派生类中是保护成员
23、。 【知识模块】 继承和派生 15 【正确答案】 C 【试题解析】 派生类继承一个基类时,默认的继承方式为 private。 【知识模块】 继承和派生 16 【正确答案】 D 【试题解析】 派生类对象对基类成员的访问权限: 对于公有继承,只有基类的公有成员可以被派生类对象访问,其他 (保护和私有 )成员不能被访问。 对于私有继承和保护继承,基类中所有成员都不能被派生类对象访问。派生类对基类成员的访问权限: 对于公有继承,基类中公有成员和保护成员可以访问,而基类中私有成员不能被访问。 对于私有继承和保护继承,也是基类中的公有成员和保护成员可以被派生类访问,而基类中的私有成员不能被访问。 【知识模
24、块】 继承和派生 17 【正确答案】 B 【试题解析】 此题考查的是派生与继承中的访问权限。 protected派生: private-不可见; protected- private; public- protected。 【知识模块】 继承和派生 18 【正确答案】 B 【试题解析】 此题考查的是继承的使用。分析题目可知,横线处应填入对基类成员函数 fun()的调用语句,此处只能使用作用域运算符 “: ”才能调用到基类的同名函数,故选项 B正确。 【知识模块】 继承和派生 19 【正确答案】 B 【试题解析】 此题考查的是保护继承。因为 Derived以 protected方式继承了Base
25、类,所以父类 Base中的公有成员和保护成员均成了 Derived类的保护成员,而 Base类的私有成员 Derived类不可 访问。所以,主函数中通过 Derived类的对象只能够访问到 Derived类的公有成员。 【知识模块】 继承和派生 20 【正确答案】 B 【试题解析】 此题考查的是派生类对基类成员的访问。基类的成员有公有、保护和私有三种访问属性:类的继承方式也有公有继承、保护继承和私有继承三种。无论那种继承方式,派生类中的成员都不能访问基类中的私有成员,但可以访问基类中的公有成员和保护成员。 【知识模块】 继承和派生 21 【正确答案】 A 【试题解析】 此题考查的是派生类对基类
26、成员的访问。 因为类中缺省的访问权限是私有,所以本题中 MyBase类中定义的成员 k是私有成员。派生类中的成员只能访问基类中的公有成员和保护成员,不能访问基类中的私有成员。所以派生类中函数 getK()中的语句 return k;是非法的。 【知识模块】 继承和派生 22 【正确答案】 C 【试题解析】 此题考查的是派生类对基类成员的访问。派生类对基类的各个成员的访问能力与继承方式无关,其成员不能访问基类中的私有成员,可以访问基类的公有成员和保护成员。 【知识模块】 继承和派生 23 【正确答案】 C 【试题解析】 此题考查的是基类成员在派生类中的访问属性。派生类中的成员不能访问基类中的私有
27、成员,可以访问基类中的公有成员和保护成员。派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员;派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都变成私有成员;派生类从基类保护继承时,基类的公有成员在派生类中变成保护成员,基类的保护成员在派生类中仍然是保护成员。根据以上分析可知,本题中只有从B类继承的 fun2()为公有属性,故选 C选项。 【知识模块】 继承和派生 24 【正确答案】 B 【试题解析】 此题考查的是派生类对基类成员的访问权限。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。派生类从基类公有继承时,基类的公有成
28、员和保护成员在派生类中仍然是公有成员和保护成员:派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都变成私有成员:派生类从基类保护继承时,基类的公有成员在派生类中变成保护成员,基类的保护成员在派生类中仍然是保护成员。 【知识模块】 继承和派生 25 【正确答案】 A 【试题解析】 在派生类 对基类的三种继承形式中,都无法对基类的私有成员访问A正确。在 B中,三种继承方式都能访问基类的保护成员,故 B不正确。 C选项的情况在 f()是基类私有成员情况下是对的,但是还有别的可能,并不一定正确。同样 D也不一定正确。 【知识模块】 继承和派生 26 【正确答案】 D 【试题解析】 通过公有继承定义的派生类,其成员函数可以访问基类的公有成员和保护成员,但不能访问基类的私有成员。 【知识模块】 继承和派生
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1