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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

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

1、国家二级 C+机试(继承和派生)模拟试卷 14及答案与解析 一、选择题 1 已知基类 Employee只有一个构造函数,其定义如下: Employee: Employee(int n): id(n) Manager是 Employee的派生类,则下列对 Manager的构造函数的定义中,正确的是 ( )。 ( A) Manager: Manager(int n): id(n) ( B) Manager: Manager(int n)id=n; ( C) Manager: Manager(int n): Employee(n) ( D) Manager: Manager(int n)Employ

2、ee(n); 2 有如下程序: #include iostream using namespace sta; class A public: A()cout A; A()cout C; ; class B: public A public: B()cout G; B()cout T; ; int main() B obj; return 0; 运行这个程序的输出结果是 ( )。 ( A) GATC ( B) AGTC ( C) GACT ( D) AGCT 3 有如下程序: #include iostream using namespace std; class Base public: vo

3、id fun0tout B; ; class Derived: public Base public: void fun()_cout D; ; int main() Derived d; d fun(); return 0; 若程序的输出结果是 BD,则划线处缺失的部分是 ( )。 ( A) fun(); ( B) Base fun(); ( C) Base: fun(); ( D) Base- fun(); 4 下列关于虚基类的描述中,错误的是 ( )。 ( A)使用虚基类可以消除由多继承产生的二义性 ( B)构造派生类对象时,虚基类的构造函数只被调用一次 ( C)声明 “class B:

4、 virtual public A”说明类 B为虚基类 ( D)建立派生类对象时,首先调用虚基类的构造函数 5 有如下程序: #inchutb iostream using namespace std; class Mountain int height; public: Mountain(int h=-): height(h) virtual ehar*GetName() constreturn山 ; int GetHeight() constreturn height; ; class Lushan: public Mountain Public: Lushan(int d): Mount

5、ain(d) Char*GetName() constreturn庐山 ; ; int main() Mountain*p=new Lushan(1000); cout p- GetName() 海拔 p- GetHeight() 米 ; return 0; 运行这个程序的输出结果是 ( )。 ( A)庐山海拔 1000米 ( B)庐山海拔 0米 ( C)山海拔 1000米 ( D)山海拔 0米 6 在 C+中,用于实现运行时多态性的是 ( )。 ( A)内联函数 ( B)重载函数 ( C)模板函数 ( D)虚函数 7 下列关于虚函数的说明中,正确的是 ( )。 ( A)从虚基类继承的函数都是

6、虚函数 ( B)虚函数不得是静态成员函数 ( C)只能通过指针或引用调用虚函数 ( D)抽象类中的成员函数都是虚函数 8 有如下程序: #include iostream using namespace std; class Base public: void fun1()cout Base n; virtual void fun2()cout Base n; ; class Derived: public Base public: void fun1()cout Derived n; void fun2()cout Derived n; ; void f(Base int main Deri

7、ved d; Base*p= 下列关于 Shape类的描述中,正确的是 ( )。 ( A)类 Shape是虚基类 ( B)类 Shape是抽象类 ( C)类 ShaDe中的 Draw函数声明有误 ( D)语句 Shape s; 能够建立 Shape的一个对象 s 21 有如下程序: using namespace std; class B public: B(int xx): x(xx)+count; x+=10; virtual void show()const cout count _ x endl; protected: static hat count; private: mt x:

8、; class D: public B public: D(int xx, int yy): B(xx), y(yy)+count; y+=100; virtual void Show()const cout count _ y end1; private: int y; ; int B: count=0; int main() B*ptr=new D(10, 20); ptr- show(); delete ptr; return 0; 运行时的输出结果是 ( )。 ( A) 1_120 ( B) 2_120 ( C) 1_20 ( D) 2_20 22 有如下程序: #include io

9、stream using namespace std; class Instrument public: virtual void Display(): 0; ; class Piano: public Instrument Public: void Display() *函数体程序略 * ) ; int main() Instrument s; Instrument *p=0; ; return 0; 下列叙述中正确的是 ( )。 ( A)语句 Insturment *p=0; “编译时出错 ( B)语句 Instrument s; 编译时出错 ( C)类 Piano中的 Display函数

10、不是虚函数 ( D)类 Instrument是一个虚基类 23 有如下程序: #include iostream 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(); cout pb- Category()

11、; return 0: 若程序运行时输出结果是 “文学 ”,则划线处缺失的语句是 ( )。 ( A) char*Category(); ( B) char*Category()const; ( C) virtual char*Category()const; ( D) virtual char*Category()const=0; 24 有如下程序: #include iostream using namespace std; class Base public: virtual void function1() tout 0; void function2()cout 1; ; class

12、Derived: public Base public: void function1()tout 2; void function2()cout 3; ; int main() Base*p=new Derived(); p- function1(); p- function2(); return 0; ; 运行时的输出结果是 ( )。 ( A) 01 ( B) 21 ( C) 03 ( D) 23 25 有如下程序: #include iostream using namespace std; class Base public: virtual void Show()cout B; ;

13、class Derived: public Base public: void Show()cout D; ; int main() Base*p1=new Derived; Derived*p2=new Derived; p1- Show(); p2- Show(); delete p1; delete p2; return 0; 运行这个程序的输出结果是 ( )。 ( A) BB ( B) BD ( C) DB ( D) DD 26 有如下类定义 class Animal public: virtual void Name()=0; ; class Koala: public Animal

14、 public: void Name() *函数体略 * ) ; 关于上述类定义,下列描述中错误的是 ( )。 ( A)类 Koala是类 Animal的派生类 ( B)类 Koala中的 Name函数是一个虚函数 ( C)类 Animal中的 Name函数是一个纯虚函数 ( D)语句 “Animal a;”能够建立类 Animal的一个对象 a 27 有如下程序: #include iostream using namespace std; class B public: virtual void f()cout B; void g()cout B; ; class D: public B

15、public: void f()cout D; void g()cout D; ; void h(B*p) p- f(); p- g(); int main() D obj; h(&obj); return 0; 运行这个程序的输出结果是 ( )。 ( A) DD ( B) BB ( C) BD ( D) DB 国家 二级 C+机试(继承和派生)模拟试卷 14答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 基类的构造函数是带有参数的,派生类从基类派生,这就需要在派生类的构造函数名后面显示的调用基类的构造函数。 【知识模块】 继承和派生 2 【正确答案】 B 【试题解析】 派生类 B

16、是由基类 A公开继承而来,所以在创建类 B的 obi对象时,首先执行基类 A的构造函数 A(),输出 A,再执行派生类 B的构造函数 B(),输出 G,当程序结束时,首先执行派生类的析构函数 B(),输出 T,再执行基类A的析构函 数 A(),输出 C。 【知识模块】 继承和派生 3 【正确答案】 C 【试题解析】 派生类 Derived的对象 d调用其成员函数 fun(),要输出结果为BD,所以在其成员函数 fun()中要调用基类 Base的成员函数 fun()。 【知识模块】 继承和派生 4 【正确答案】 C 【试题解析】 虚基类是为了消除由多重继承产生的二义性而提出的。虚基类的说明格式是

17、: Class类名: virtual继承方式基类名,其中关键字 virtual与继承方式的位置无关,但必须位于 基类名之前,且 virtual只对紧随其后基类名起作用。对于本题来说,声明 “classB: virtual public A”说明类 A为虚基类。 【知识模块】 继承和派生 5 【正确答案】 A 【试题解析】 在基类 Mountain中定义了虚函数 GetName()输出字符串 “山 ”,而在派生类 Lushan中对虚函数 GetName()进行了重新定义,输出字符串 “庐山 ”。在主函数中对派生类中的虚函数 GetName()进行了多态调用,此时调用的是派生类中重新定义的 Get

18、Name(),输出字符字符串 “庐山 ”。 【知识模块】 继承和派生 6 【正确答案】 D 【试题解析】 此题考查的是虚函数的概念。 C+语言的多态性有两种:函数重载和虚函数。虚函数只有在运行时才能被确定,称为运行时多态。编译时的多态是通过函数重载和模板实现的。 【知识模块】 继承和派生 7 【正确答案】 B 【试题解析】 此题考查的是虚函数的概念。在成员函数的声明前面加上 virual关键字,即可把函数声明为虚函数。虚函数可以是另一个函数的友元函数而不能是静态成员函数。 【知识模块】 继承和派生 8 【正 确答案】 B 【试题解析】 此题考查的是虚函数的概念。在 C+语言中,一个派生类的对象

19、可以被它的任何一个基类的指针所指向,若基类和派生类中存在一模一样的成员函数。那么通过该基类指针调用这样的成员函数时,若这个成员函数被定义成虚函数,那么就调用派生类中的;否则就调用基类中的。本题中,在 f()函数中,形参b是一个基类的引用,它引用的是主函数中定义的派生类对象 obj,所以在调用fun1()时,运行的是基类的版本,而 fun2()运行的是派生类的版本。 【知识模块】 继承和派生 9 【正确答案】 C 【试题解析】 此题考查的是虚函数的概念。此题中, func1是虚函数, func2是一般成员函数,而且在派生类与基类中都存在两个这样的函数。在主函数中,语句 A*p=new B;定义了

20、一个基类的指针 p,并让它指向一个派生类对象。所以通过该指针调用 func1时,运行的是派生类的版本,而通过该指针调用 func2运行的是基类的版本。所以程序运行的最后输出是: B1A2。 【知识模块】 继承和派生 10 【正确答案】 A 【试题解析】 此题考查的是多态性。在 C+中,一个基类指针可以用于指向它的派生类 对象,而且通过这样的指针调用虚函数时,被调用的是该指针实际所指向的对象类的那个重定义版本。在实函数的情况下。通过基类指针所调用的只能是基类的那个函数版本,无法调用到派生类中重定义函数。此题中,通过指针 pb所调用的是基类的版本,即输出 a和 b的值 10, 20。 【知识模块】

21、 继承和派生 11 【正确答案】 C 【试题解析】 此题考查的是虚函数和多态性。此题中,因为 f()是虚函数具有多态性,所以通过指针 p调用的 f()是派生类 Derived中定义的 f():而 g()不是虚函数,通过指针 p调用的是 Base中的 g()。 【知识模块】 继承和派生 12 【正确答案】 B 【试题解析】 此题考查的是虚函数与多态性。在成员函数的声明前面加上 virual关键字,即可把函数声明为虚函数:在 C+中,一个基类指针可以用于指向它的派生类对象,而且通过这样的指针调用虚函数时,被调用的是该指针实际所指向的对象类的那个重定义版本。本题中,从基类的定义可以看出: outpu

22、t()函数是普通成员函数,而 Print()函数是虚函数。所以,通过 ptr指针调用的 output()是基类中的 output(),而通过它调用的 Print()则是派生类中的 Print()。 【知识模块】 继承和派生 13 【正确答案】 C 【试题解析】 此题考查的是虚函数与多态性。在成员函数的声明前面加上 virual关键字,即可把函数声明为虚函数:在 C+中,一个基类指针可以用于指向它的派生类对象,而且通过这样的指针调用虚函数时,被调用的是该指针实际所指向的对象类的那个重定义版本。此题中, fun1()和 fun2()的形参分别是基类的指针和引用,给 fun1()传入的实参是指向派生

23、类对象的指针 p, funl()将调用 D类中的show()输出字符 D;给 fun2()出入的实参是基类对象, fun2()调用类 B中的 show()输出字符 B; fun3()由于形参是基类对象,调用的始终都是基类的 show(),输出字符 B。故最终输出结果是 DBB。 【知识模块】 继承和派生 14 【正确答案】 D 【试题解析】 此题考查的是抽象类和纯虚函数的概念。纯虚函数可以有函数体,它的实现由派生类给出。 【知识模块】 继承和派生 15 【正确答案】 C 【试题解析】 此题考查派生类与虚函数的考查。由主函数 main入手,其中分别定义了 类 GA和 GB的对象 a和 b。首先,

24、执行参数 a的 show函数调用,其中的输出语句为调用 GA类中的 f()虚函数,返回 1。同理 display(a)函数输出 1。show(b)函数中调用的为 GA中的 f()函数, display(b)调用 GA中 f()函数,返回 1,display(b)调用 GB中的 f()函数返回 2。所以最后输出为 1112。 【知识模块】 继承和派生 16 【正确答案】 A 【试题解析】 在 C+中,多态性可以分为两类:编译时的多态性和运行时的多态性。编译时的多态性是通过函数重载和模版体现的,运 行时的多态性是通过虚函数体现的。 【知识模块】 继承和派生 17 【正确答案】 B 【试题解析】 拥

25、有纯虚函数的类叫做抽象类,所以抽象类中必然包含有虚函数。 【知识模块】 继承和派生 18 【正确答案】 D 【试题解析】 在派生类 classB中对基类中的虚拟成员函数 virtualvoidf()和实函数voidg()进行了重新定义,在主函数中通过语句 show(b);调用派生类中的虚函数virtual void f()cout 3; 输出 3,调用基类的实函数 void g()cout 2; 输出2。所以选项 D为正确答案。 【知识模块】 继承和派生 19 【正确答案】 D 【试题解析】 因为类 Book继承自基类 Publication,所以在类 Book中的虚常成员函数 *getTyp

26、e()return书 ; 就会覆盖基类中的虚常成员函数*getType()constreturn未知类型 ; ,所以在主函数中调用函数showPublication(book)时, getType()函数的输出的结果是 “书 ”, getName()函数的输出结果为 “精彩人生 ”。 【知识模块】 继承和派生 20 【正确答案】 B 【试题解析】 因为类 Shape中包含纯虚函数 Draw(),所以类 Shape是抽象类。 【知识模块】 继承和派生 21 【正确答案】 B 【试题解析】 在主函数中定义了一个基类 B的指针变量 ptr,并调用类 D的构造函数创建了类 D的实例对象,因为变量 co

27、unt是全局变量所以在调用基类 B的构造函数给其值加 1,在调用 D的构造函数时给其值加 1,因而输出其值等于 2,在类 D的构造函数中给成员变量 y的值加 100,所以其等于 120并输出。 【知识模块】 继承和派生 22 【正确答案】 B 【试题解析】 由于函数 Display()是一个纯虚函数,所以类 Instrument是抽象类,而抽象类是不能定义对象的,因而选项 B为正确选项。 【知识模块】 继承和派生 23 【正确答案】 D 【试题解析】 根据程序运行的结果为:文学,说明程序执行了派生类 Novel中的成员函数 *Category()constreturn文学 ; ,所以在基类 B

28、ook中要把函数*Category()const定义为纯虚函数。 【知识模块 】 继承和派生 24 【正确答案】 B 【试题解析】 函数 function1()在基类 Base中定义为虚成员函数,而在派生类Dervied中重新进行了定义,输出字符 2,函数 function2()在基类 Base中定义虚成员函数,在主函数中使用指向基类的指针变量 p访问 function2()时,输出 1。 【知识模块】 继承和派生 25 【正确答案】 D 【试题解析】 在基类 Base中定义了虚函数 Show()输出字符 B,而在派生类Derived中对虚函数 Show()进行了重新定义,输出 字符 D。在主

29、函数中对基类和派生类中的虚函数 Show()进行了多态调用,此时调用的是派生类中重新定义的Show(),输出字符 D。 【知识模块】 继承和派生 26 【正确答案】 D 【试题解析】 在类 Animal定义了纯虚函数 Name(),所以类 Animal就是一个抽象类,而抽象类是不能够建立对象的。 【知识模块】 继承和派生 27 【正确答案】 D 【试题解析】 在基类 B中定义虚函数 f()和成员函数 g(),而在派生类 D中定义了函数 f()和同名函数 g()。而函数 h中的形参 为指向基类的指针变量 p,所以在主函数中执行 h(&obj)时,会调用派生类的函数 f(),输出 D,再调用基类的函数 g(),输出 B。 【知识模块】 继承和派生

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