ImageVerifierCode 换一换
格式:DOC , 页数:34 ,大小:80.50KB ,
资源ID:497759      下载积分:2000 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
如需开发票,请勿充值!快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝扫码支付 微信扫码支付   
注意:如需开发票,请勿充值!
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.mydoc123.com/d-497759.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文([计算机类试卷]国家二级C++机试(继承和派生)模拟试卷2及答案与解析.doc)为本站会员(registerpick115)主动上传,麦多课文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文库(发送邮件至master@mydoc123.com或直接QQ联系客服),我们立即给予删除!

[计算机类试卷]国家二级C++机试(继承和派生)模拟试卷2及答案与解析.doc

1、国家二级 C+机试(继承和派生)模拟试卷 2及答案与解析 一、选择题 1 有如下程序 #include using namespace std; class Base protected: Base()cout using namespace std; class A public: A(int i)x=i; void dispa()cout using namespace std; class Base int x; public; Baseint 11=O); x(n)cout using namespace std; class AA public: AA0cout using name

2、space std; class C1 public: -ClOcout using namespace std; class Base public: Base(int x=O): valB(x)cout using namespace std; class Basel public: Basel(int d) cout using namespace std; class A public: AOcout using namespace std; class Base public: void fun()coutfun(); 16 下列关于虚基类的描述中,错误的是 ( )。 ( A)使用虚

3、基类可以消除由多继承产生的二义性 ( B)构造派生类对象时,虚基类 的构造函数只被调用一次 ( C)声明 “class B: virtual public A”说明类 B为虚基类 ( D)建立派生类对象时,首先调用虚基类的构造函数 17 有如下程序: #include using namespace std; class Mountain int height; public: Mountain(int h=O): height(h) virtual char*GetName0 constreturn”山 ”; int GetHeight() constreturn height; ) );

4、class Lushan: public Mountain Public: Lushan(int d): Mountain(d) , Char*GetName()constreturn”庐山 ”; ) ); int main() Mountain*p=new Lushan(1 000); coutGetName0GetHeight() using namespace std; class Base public: void funlOcout using namespace std; class A public: virtual void funcl()coutfuncl(); P一 fun

5、c2(); return 0: ) 运行此程序,屏幕上将显示输出 ( )。 ( A) B182 ( B) A1A2 ( C) B1A2 ( D) A182 22 如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。有如下程序,没有使用多态机制。 #include using namespace std; class Base int a, b; public: Base(int X, int Y)a=x; b=y; ) void show()cout using namespace std; class Base public: virtual void

6、 f()coutf(); P一 g(); return O: ) 运行时输出的结果是 ( )。 ( A) f+g+ ( B) fo+g+ ( C) f+g0+ ( D) f0+g0+ 24 有如下程序; #include using namespace std; class Base public: void outputocoutoutput(); ptr一 Print(); delete ptr; return (): ) 程序的输出结果是 ( )。 ( A) lB ( B) lD ( C) 2B ( D) 2D 25 有如下程序: #include using namespace std

7、; class B public: virtual void show()coutshow(); ) void fun2(B ); class Piano: public Instrument public: void Display() *函数体程序略 * ) ; int main() Instrument s; Instrument*P=0: ; retum 0: 下列叙述中正确的是 ( )。 ( A)语句 “Insturment*p=O; ”编译时出错 ( B)语句 “Instrument s; ”编译时出错 ( C)类 Piano中的 Display函数不是虚函数 ( D)类 Inst

8、rument是 一个虚基类 35 有如下程序: #include using namespace std; class Book public: Book(char*t=“)strcpy(title, t); ) private: char title40; ; class Novel: public Book public: Novel(char*t=“): Book(t) char*Category()constreturn“文学 ”; ) ); int main() Book*pb; pb=new Novel(); coutCategory(); return O: 若程序运行时输出结果

9、是 “文学 ”,则划线处缺失的语句是 ( )。 ( A) char*Category(); ( B) char*Category()const; ( C) virtual char*Category()const; ( D) virtual char*Category()const=O; 36 有如下程序: #include using namespace std; class Base public: virtual void function l() coutfunctionl(); p-function2(); return O: ; 运行时的输出结果是 ( )。 ( A) 01 ( B

10、) 21 ( C) 03 ( D) 23 37 有如下程序: #include using namespace std; class Base public: virtual void Show()coutShow(); p2一 Show(); delete Pl; delete p2; return 0: ) 运行这个程序的输出结果是 ( )。 ( A) BB ( B) BD ( C) DB ( D) DD 38 有如下类定义 class Animal public: virtual void Name0=0; ; class Koala: public Animal public: voi

11、d Name() *函数体略 * ) ; 关于上述类定义,下列描述中错误的是 ( )。 ( A)类 Koala是类 Animal的派生类 ( B)类 Koala中的 Name函数是一个虚函数 ( C)类 Animal中的 Name函数是一个纯虚函数 ( D)语句 “Animal a: ”能够建立类 Animal的一个对象 a 39 有如下程序: #include using namespace std; class B public: virtual void f0coutf(); p-g(); ) int main() D obj; h( obj); return 0; ) 运行这个程序的输

12、出结果是 ( )。 ( A) DD ( B) BB ( C) BD ( D) DB 国家二级 C+机试(继承和派生)模拟试卷 2答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 此题考查的是派生类对象的构造。建立派生类对象时,构造函数的执行顺序是:执行基类的构造函数,调用顺序按照各个基类被被继承时声明的顺序;执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序:执行派生类的构造函数。此题中,在建立派生类 Derived的对象 dl时会先调用基类 Base的构造,调用的是默认构造函数,输出字符 A;然后调用自身的构造函数,输出 B;故程序的输出结粜是: AB。 2 【正确答

13、案】 A 【试题解析】 此题考查的是派生类对象的析构。释放派生类对象时,析构函数的执行顺序是:首先调用派生类自身的析构函数;然后渊用类成员对象的析构函数;最后调用基类的析构函数。所以四个选项中只有选项 A正确。 3 【正确答案】 D 【试题解析】 此题考查的是派生类的构造函数和析构蛹数。在撤销派生类对象时,析构函数的执行过程和构造函数严格相反,即:对派生类新增普通成员进行清理:调用成员对象析构函数,调用基类析构 函数对基类进行清理。 4 【正确答案】 C 【试题解析】 此题考查的是继承和派生。无论使用哪种继承方式,派生类中的成员都不能访问基类中的私有成员,而可以访问基类中的公有成员和保护成员,

14、所以选项 A错误; c+中只有抽象类不能被实例化,而虚基类不一定非得是抽象类,所以选项 B错误;住派生类中可以重新定义从基类继承卜来的虚函数,也可以不重新定义,故选项 D错误。 5 【正确答案】 C 【试题解析】 此题考企的是派生类的构造。主函数中,首先声明 B类的对象 b,执行进入 B的构造函数 B(int i)阿接着 执行 A的构造函数 A(inti),形参 i为 12, x被赋值 12;通过对象 b渊用其成员函数 dispb(),输出结果 12;接着执行函数dispb()的第 2条语句输出 2,然后主函数结束。 6 【正确答案】 C 【试题解析】 此题考查的是派生类的构造与析构。建立派生

15、类的对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序 (自左向右 ) 执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序一 执行自身的构造函数。此题中,执行语句 Derived d1(3)首先调 用基类的构造函数,输出 0;接着调用自身的构造函数输出 3。执行语句 Derived d2(5, 7)时,会调用基类的 Base(n)函数输出 7:然后执行继承类 rlI的 Derived(int m, int n)的 v(m)输出 5。 7 【正确答案】 A 【试题解析】 在基类 AA的默认构造函数中,输出字符 1,在继承类 BB的默认构造函数

16、中,输出字符 2,在带有参数 n的构造函数中,输出字符 3。在主函数中,在创建 BB的对象 b(4)时,会首先调用基类 AA的构造函数输出字符 l,再调用类 BB带参数的构造函数输出 字符 3。在创建 BB的对象 c时,会首先调用基类AA的构造函数输出字符 1,再调用类 BB默认的构造函数输出字符 2。所以程序输出的结果为 1312。 8 【正确答案】 B 【试题解析】 在主函数中定义 C2类的对象,当程序结束时,首先调用 C2类的析构函数 C2,输出 2,冉调用 Cl类的析构函数 Cl,输出 l。所以程序运行的结果就是 2l。 9 【正确答案】 A 【试题解析】 在主函数中创建类 Deriv

17、ed对象 objl2(2, 3)时,因为类 Derived是从基类 Base派生而来,所以首先调用基 类的构造函数,输出 2,冉调用派生类构造函数,输出 3。当主函数运算结果时,首先调用派生类的析构函数,输出 3,再调用基类的析构函数输出 2。所以输出结果为 2332。 10 【正确答案】 A 【试题解析】 因为派生类从基类中继承,它含有基类中的数据成员和函数成员,所以当生成派生类对象时,能无条件的调用基类的构造函数。 11 【正确答案】 B 【试题解析】 根据派生类构造函数的一般格式: (): () (), (), ()。在派生类 BB的构造函数总参数表后面应该接上基类名 AA和其参数。 1

18、2 【正确答案】 D 【试题解析】 程序存创建派生类对象 d时,分别调用基类 Basel和 Basel的构造函数。 13 【正确答案】 C 【试题解析】 基类的构造函数是带有参数的,派生类从基类派生,这就需要在派生类的构造函数名后而显示的调用基类的构造函数。 14 【正确答案】 B 【试题解析】 派生类 B是由基类 A公开继承而来,所以在创建类 B的 obj对象时,首先执行基类 A的构造函数 A(),输出 A,再执行派生类 B的构造函数 B(),输出 G,当程序结束时,首先执行派生类的析构函数 B(),输出 T,再执行基类A的析构函数 A(),输出 c。 15 【正确答案】 C 【试题解析】

19、派生类 Derived的对象 d调用其成员函数 mn(),要输出结果为BD,所以在其成员函数 fun()中要调用基类 Base的成员函数 fun()。 16 【正确答案】 C 【试题解析】 虚基类是为了消除南多重继承产生的二义性而提出的。虚基类的说明格式是: class: virtual,其中关键字 virtual与继承方式的位置无关,但必须位于基类名之前,日 virtual只对紧随其后基类名起作用。对于本题来说,声明 “class B: virtual public A”说明类 A为虚基类。 17 【正确答案】 A 【试题解析】 在基类 Mountain中定义了虚函数 GetName()输出

20、字符串 “山 ”,而在派生类 Lushan中对虚函数 GetName()进行了重新定义,输出字符串 “庐山 ”。在主函数中对派生类中的虚函数 GetName()进行了 多态调用,此时调用的是派生类中重新定义的 GetName(),输出字符字符串 “庐山 ”。 18 【正确答案】 D 【试题解析】 此题考查的是虚函数的概念。 C+语言的多态性有两种:函数重载和虚函数。虚函数只有红运行时才能被确定,称为运行时多态。编译时的多态是通过函数重载和模板实现的。 19 【正确答案】 B 【试题解析】 此题考查的是虚函数的概念。在成员函数的声明前面加上 virual关键字,即可把函数声明为虚函数。虚函数可以

21、是另一个函数的友元函数而不能是静态成员函数。 20 【正确答案】 B 【试题解析】 此题考查的是虚函数的概念。在 C+语言中,一个派生类的对象可以被它的任何一个基类的指针所指向,若基类和派生类中存在一模一样的成员函数。那么通过该基类指针调用这样的成员函数时,若这个成员函数被定义成虚函数,那么就调用派生类中的;否则就调用基类中的。本题中,在 f()函数中,形参b是一个基类的引用,它引用的是主函数中定义的派生类对象 obi,所以在调用fun()时,运行的是基类的版本,而 fun2()运行的是派生类的版本。 21 【正确答案】 C 【试题解析】 此题考查的是虚函数的 概念。此题中, funcl是虚函数, fhnc2是一般成员函数,而且在派生类与基类中都存在两个这样的函数。在主函数中,语句

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1