您好,欢迎来到百家汽车网。
搜索
您的当前位置:首页国家二级C++机试(继承和派生)模拟试卷6(题后含答案及解析)

国家二级C++机试(继承和派生)模拟试卷6(题后含答案及解析)

来源:百家汽车网


国家二级C++机试(继承和派生)模拟试卷6 (题后含答案及解析)

题型有:1. 选择题

选择题

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,int b):XA(a),XB(b){}

正确答案:B 解析:此题考查的是派生类中构造函数的定义。派生类的构造首先要调用基类的构造函数,对基类成员初始化;然后对派生类中的新增成员初始化。格式为:派生类名(构造函数形参表)基类构造函数(形参表)。 知识模块:继承和派生

2. 有如下程序: #inc1ude<iostream> using namespace std; class BASEf public: ~BASE( ) {cout<<”BASE”;} }; class DERIVED:public BASE{ public: ~DERIVED( ) {cout<<”DERIVED”;} }; int main( ) {DERIVED x;return 0;} 执行后的输出结果是( )。

A.BASE B.DERIVED

C.BASEDERIVED D.DERIVEDBASE

正确答案:D

解析:此题考查的是派生类的定义和使用。当对象被删除时,派生类的析构函数就被执行。由于析构函数不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。 知识模块:继承和派生

3. 下列有关继承和派生的叙述中,正确的是( )。

A.如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员

B.派生类的成员函数可以访问基类的所有成员 C.基类对象可以赋值给派生类对象

D.如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类

正确答案:D

解析:此题考查的是继承和派生。无论是哪种继承方式,派生类都能够访问基类的公有和保护成员,而不能访问基类的私有成员,故选项A和B错误:公有继承时,基类的对象不可作为派生类的对象处理,即基类对象不可赋值给派生类对象,所以选项C错误。 知识模块:继承和派生

4. 下列有关类继承的叙述中,错误的是( )。 A.继承可以实现软件复用

B.虚基类可以解决由多继承产生的二义性问题 C.派生类构造函数要负责调用基类的构造函数 D.派生类没有继承基类的私有成员

正确答案:D

解析:此题考查的是类继承。派生类继承了基类的(全部数据成员,私有成员),只是基类的私有成员在派生类中是隐藏的,只能在基类内部访问,故选项D错误。 知识模块:继承和派生

5. 在下列关键字中,不能用来表示继承方式的是( )。 A.private B.static C.public D.protected

正确答案:B 解析:此题考查的是继承方式。继承方式有私有(private)、保护(protected)、公有(public)三种。 知识模块:继承和派生

6. 在类声明中,紧跟在“public:”后声明的成员的访问权限是( )。 A.私有 B.公有 C.保护 D.默认

正确答案:B

解析:类中提供了3种访问控制的权限:公有,私有和保护。其中公有类型定义了类的外部接口,任何一个外部的访问都必须通过外部接口进行。私有类型的成员只允许本类的成员函数访问,来自类外部的任何访问都是非法的,保护类型介于公有类型和私有类型之间,在继承和派生时可以体现出其特点。 知识模块:继承和派生

7. 定义派生类时,若不使用关键字显式地规定采用何种继承方式,则默认方式为( )。

A.私有继承 B.非私有继承 C.保护继承

D.公有继承

正确答案:A

解析:继承的方式包括三种:公有继承,保护继承和私有继承。如果不显示的给出继承方式,缺省的类继承方式是私有继承private。 知识模块:继承和派生

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+l), yy(n) {cout<<yy;) YY(int m, int n):XX(m), yy(n) {cout<<yy;} }; 下列选项中,输出结果为AO的语句是( )。

A.YYy1(0,0); B.YYy2(1); C.YYy3(0); D.YYy4;

正确答案:D

解析:考查的是类的继承。选项A的执行结果为BO,建立YY的对象yl,首先调用其构造函数,YY继承于XX所以先调用的为XX的构造函数,根据输入的参数可知输出B,然后执行YY的构造函数输出0;同理,选项B的执行结果为B1,选项C的执行结果为B0。 知识模块:继承和派生

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类的对象包含的数据成员的个数是( )。

A.1 B.2 C.3 D.4

正确答案:B

解析:因为类XX包括…个数据成员xdata,而类YY继承自类XX,所在类YY中也包含数据成员xdata,同时类YY中也定义了其本身的数据成员ydata,因而YY类的对象包含的数据成员的个数是2。 知识模块:继承和派生

10. 下列关于继承方式的描述中,错误的是( )。

A.如果不显武地指定继承方式,缺省的继承方式是私有(private)

B.采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员 C.采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员 D.采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员

正确答案:D

解析:基类中的私有成员在派生类中是隐蔽的,只能在基类内部访问。派生类中的成员不可以访问基类中的私有成员,只可以访问基类中的公有成员和保护成员。 知识模块:继承和派生

11. 下列代码段声明了3个类 class Person{}; class Student: public Person{}; class Undergraduate:Student{}; 下列关于这些类之间关系的描述中,错误的是( )。

A.类Person是类Undergraduate的基类 B.类Undergraduate从类student公有继承 C.类student是类Person的派生类

D.类Undergraduate是类Person的派生类

正确答案:B

解析:Student类公有继承自Person类,Undergraduate类私有继承自Student类。所以Undergraduate类是从Student类私有继承的。 知识模块:继承和派生

12. 下列关于基类和派生类关系的叙述中,正确的是( )。 A.每个类最多只能有一个直接基类

B.派生类中的成员可以访问基类中的任何成员

C.基类的构造函数必须在派生类的构造函数体中调用 D.派生类除了继承基类的成员,还可以定义新的成员

正确答案:D 解析:继承分为单继承和多继承,一个类只有一个直接基类时,称为单继承;而一个类同时有多个直接基类时,则称为多继承。派生类的数据成员由所有基类的的数据成员与派生类新增的数据成员共同组成。 知识模块:继承和派生

13. 若已定义了类Vehic1e,则下列派生类定义中,错误的是( )。 A.class Car:vehic1e{/*类体略*/}; B.class Car:public car{/*类体略*/}; C.class Car:public Vehic1e{/*类体略*/);

D.class Car:virtual public Vehic1e{/*类体略*/).

正确答案:B

解析:类Car不能派生自它本身。 知识模块:继承和派生

14. 下列描述中,错误的是( )。

A.公有继承时基类中的公有成员在派生类中仍是公有成员 B.公有继承时基类中的保护成员在派生类中仍是保护成员 C.保护继承时基类中的公有成员在派生类中仍是公有成员 D.保护继承时基类中的保护成员在派生类中仍是保护成员

正确答案:C

解析:保护继承时基类中的公有成员在派生类中是保护成员。 知识模块:

继承和派生

15. 当派生类继承一个基类时,默认的继承方式为( )。 A.public B.protected C.private D.不确定

正确答案:C

解析:派生类继承…个基类时,默认的继承方式为private。 知识模块:继承和派生

16. 下列关于派生类的叙述中,错误的是( )。 A.派生类至少要有一个基类

B.派生类中包括了从基类继承的成员

C.一个派生类可以作为另一个派生类的基类

D.基类成员被派生类继承以后访问权限保持不变

正确答案:D

解析:派生类对象对基类成员的访问权限:①对于公有继承,只有基类的公有成员可以被派生类对象访问,其他(保护和私有)成员不能被访问。②对于私有继承和保护继承,基类中所有成员都不能被派生类对象访问。派生类对基类成员的访问权限:①对于公有继承,基类中公有成员和保护成员可以访问,而基类中私有成员不能被访问。②对于私有继承和保护继承,也是基类中的公有成员和保护成员可以被派生类访问,而基类中的私有成员不能被访问。 知识模块:继承和派生

17. 有如下类声明: class MyBASE { int k: public: void set(int n){k=n;} int get( )const {return k;} }; class MyDERIVED:protected MyBASE { protected: int j; public: void set(int m,int n){MyBASE::set(m);j=n;} int get( )const{return MyBASE::get( )+j;} }; 则类MyDERIVED中保护的数据成员和成员函数的个数是( )。

A.4 B.3 C.2 D.1

正确答案:B

解析:此题考查的是派生与继承中的访问权限。protected派生:private一>不可见;protected一> private;public一> protected. 知识模块:继承和派生

18. 有如下程序: #inc1ude <iostream> using namespace std; class Base { public: void fun( ){cout<<”Base::fun”<<

endl;} }; class Derived: public Base { public: ,void fun( ) { cout<<”Derived::fun”<<endl; } }; int main( ) { Derived d: d.mn( ); return 0; } 己知其执行后的输出结果为: Base::fun Derived::fun 则程序中下划线处应填入的语句是( )。

A.Base.fun( ); B.Base::fun( ); C.Base一>fun( ); D.mn( );

正确答案:B

解析:此题考查的是继承的使用。分析题目可知,横线处应填入对基类成员函数fun( )的调用语句,此处只能使用作用域运算符“::”才能调用到基类的同名函数,故选项B正确。 知识模块:继承和派生

19. 有如下程序: #inc1ude <iostream> using namespace std; class Base { prVate: Void mnl( )const{cout<<”fun1”;} proteCted: Void fun2( )const{cout<<”mn2¨;} public: Void fun3( )const{cout<<”fun3”;} }; class DeriVed:prOteCted BaSe { public: Void fun4( )const{cout<<”fIun4”;} }; int main( ) { DeriVed obj; obj.fun1( ); //① obj.fun2( ); //② obj.fun3( ); //③ obj.fun4( ); //④ reurn O: } 其中有语法错误的语句是( )。

A.①②③④ B.①②③ C.②③④ D.①④

正确答案:B

解析:此题考查的是保护继承。因为Derived以protected方式继承了Base类,所以父类Base中的公有成员和保护成员均成了Derived类的保护成员,而Base类的私有成员Derived类不可访问。所以,主函数中通过Derived类的对象只能够访问到Derived类的公有成员。 知识模块:继承和派生

20. 在公有继承的情况下,允许派生类直接访问的基类成员包括( )。 A.公有成员

B.公有成员和保护成员

C.公有成员、保护成员和私有成员 D.保护成员

正确答案:B

解析:此题考查的是派生类对基类成员的访问。基类的成员有公有、保护和私有三种访问属性;类的继承方式也有公有继承、保护继承和私有继承三种。无论那种继承方式,派生类中的成员都不能访问基类中的私有成员,但可以访问基

类中的公有成员和保护成员, 知识模块:继承和派生

21. 有如下类定义: class MyBase{ int k; publiC: MyBase(int n=0):k(n){} int value( )const{retum k;} }; class MyDeriVed:MyBase{ int j; public: MyDerived(int i):j(i){} int getK( )const{ return k;) mt geU( )const{ return j;} }; 编译时发现有一处语法错误,对这个错误最准确的描述是( )。

A.函数getK试图访问基类的私有成员变量k B.在类MyDerived的定义中,基类名MyBase前缺少关键字public、protected或private

C.类MyDerived缺少一个无参的构造函数

D.类MyDerived的构造函数没有对基类数据成员k进行初始化

正确答案:A 解析:此题考查的是派生类对基类成员的访问。因为类中缺省的访问权限是私有,所以本题中MyBase类中定义的成员k是私有成员。派生类中的成员只能访问基类中的公有成员和保护成员,不能访问基类中的私有成员。所以派生类中函数getKO中的语句return k;是非法的。 知识模块:继承和派生

22. 派生类的成员函数不能访问基类的( )。 A.公有成员和保护成员 B.公有成员 C.私有成员 D.保护成员

正确答案:C 解析:此题考查的是派生类对基类成员的访问。派生类对基类的各个成员的访问能力与继承方式无关,其成员不能访问基类中的私有成员,可以访问基类的公有成员和保护成员。 知识模块:继承和派生

23. 若有如下类定义: class B{ void funl( ){} protected: double varl; public: void fun2( ){} }; class D:public B{ protected: void fun3( ){} }; 已知obj是类D的对象,下列句中不违反类成员访问控制权限的是( )。

A.obj.fun1( ); B.obj.varl;

C.obj.fun2( ); D.obj.fun3( );

正确答案:C 解析:此题考查的是基类成员在派生类中的访问属性。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员;派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都变成私

有成员;派生类从基类保护继承时,基类的公有成员在派生类中变成保护成员,基类的保护成员在派生类中仍然是保护成员。根据以上分析可知,本题中只有从B类继承的fun2( )为公有属性,故选C选项。 知识模块:继承和派生

24. 有如下类声明: class Base{ protected; int amount, public; Base(int n=0): amount(n){} int getAmount( )const{retum amount,} }; class Derived: public Base{ protected; int value, public; Derived(int m, int n): value(m). Base(n){} Int getData( )const{ return value+amount;} }; 已知x是一个Derived对象,则下列表达式中正确的是( )。

A.x.value+x.getAmount( )

B.x.getData( )一x.gctAmount( ) C.x.getData( )一x.amount D.x.value+x.amount

正确答案:B 解析:此题考查的是派生类对基类成员的访问权限。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员:派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都变成私有成员:派生类从基类保护继承时,基类的公有成员在派生类中变成保护成员,基类的保护成员在派生类中仍然是保护成员。 知识模块:继承和派生

25. 在一个派生类的成员函数中,试图调用其基类的成员函数“void f( );”,但无法通过编译。这说明( )。

A.f( )是基类的私有成员 B.f)是基类的保护成员 C.派生类的继承方式为私有 D.派生类的继承方式为保护

正确答案:A

解析:在派生类对基类的三种继承形式中,都无法对基类的私有成员访问A正确。在B中,三种继承方式都能访问基类的保护成员,故B不正确。C选项的情况在f( )是基类私有成员情况下是对的,但是还有别的可能,并不一定正确。同样D也不一定正确。 知识模块:继承和派生

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baijiahaobaidu.com 版权所有 湘ICP备2023023988号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务