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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

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

1、国家二级 C+机试(继承和派生)模拟试卷 10及答案与解析 一、选择题 1 有如下程序: #include using namespace std; class BASE public: BASE()cout using namespace std; class Music public: void setTitle(char*str)strcpy(title, str); protected: char type10; private: char title20; ; class Jazz: public Music public: void set(char*str) strcpy(typ

2、e, “Jazz“); strcpy(title, str); ; 下列叙述中正确的是 ( )。 ( A)程序编译正确 ( B)程序编译时语句 出错 ( C)程序编译时语句 出错 ( D)程序编译时语句 和 都出错 12 有如下类定义: class B public: void fun1() private: void fun2() protected: void fun3() ; class D: public B protected: void fun4() ; 若 obi是类 D的对象,则下列语句中不违反访问控制权限的是 ( )。 ( A) obj fun1(); ( B) obj fu

3、n2(); ( C) obj fun3(); ( D) obj fun4(); 13 有如下程序: #include using namespace std; class Media public: void Name(); void Show(); protected: int page; ; class Book: private Media public: void Print() cout using namespace std; class Base protected: Base()cout using namespace std; class AA public: AA()cou

4、t 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 B public: virtual void show()coutshow(); void fun2(B&ref)ref show(); void fun3(B b)b show(); int main() B b, *p=new D; D d; fun1(p); fun2(b); fun3(d); return 0; 程序的输出结果是 ( )。 (

5、A) BBB ( B) BBD ( C) DBB ( D) DBD 23 下列选项中,与实现运行时多态性无关的是 ( )。 ( A)重载函数 ( B)虚函数 ( C)指针 ( D)引用 24 有如下程序: #include using namespace std; class Publication出版物类 char name30; public: Publication(char*name=“未知名称 “) strcpy(this-name, name); const char*getNameoconstreturn name; virtual const char*getType()con

6、streturn“未知类型 “; ; class Book: public Publication书类 public: Book(char*name): Publication(name) virtual const char*getType()constreturn“书 “; ; void showPublication(Publication &p) cout using namespace std; class Instrument public: virtual void Display()=0: ; class Piano: public Instrument public: voi

7、d Display() *函数体程序略 * ; int main() Instrument s; Instrument*p=0; ; return 0; 下列叙述中正确的是 ( )。 ( A)语句 “Insturment*p=0; ”编译时出错 ( B)语句 “Instruments; ”编译时出错 ( C)类 Piano中的 Display函数不是虚函数 ( D)类 Instrument是一个虚基类 26 有如下程序: #include using namespace std; class Base public: virtual void Show()coutShow(); p2-Show

8、(); delete p1: delete p2; return 0; 运行这个程序的输出结果是 ( )。 ( A) BB ( B) BD ( C) DB ( D) DD 国家二 级 C+机试(继承和派生)模拟试卷 10答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 此题考查的是派生类的定义和使用。当对象被删除时,派生类的析构函数就被执行。由于析构函数不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。 【知识模块】 继承和派生 2 【正确答案】 B 【试题解析】 此题考查的

9、是继承方式。继承方式有私有 (private)、保护(protected)、公有 (public)三种。 【知识模块】 继承和派生 3 【正确答案】 D 【试题解析】 考查的是类的继承。选项 A的执行结果为 B0,建立 YY的对象y1,首先调用其构造函数, YY继承于 XX所以先调用的为 XX的构造函数,根据输入的参数可知输出 B,然后执行 YY的构造函数输出 0;同理,选项 B的执行结果为 B1,选项 C的执行结果为 B0。 【知识模块】 继承和派生 4 【正确答案】 B 【试题解析】 Student类公有继承自 Person类, Undergraduate类私有继承自Student类。所以

10、 Undergraduate类是从 Student类私有继承的。 【知识模块】 继承和派生 5 【正确答案】 C 【试题解析】 保护继承时基类中的公有成员在派生类中是保护成员。 【知识模块】 继承和派生 6 【正确答案】 B 【试题解析】 此题考查的是派生与继承中的访问权限。 protected派生: private-不可见; protected-private: public-protected。 【知识模块】 继承和派生 7 【正确答案】 B 【试题解析】 此题考查的是派生类对基类成员的访问。基类的成员有公有、保护和私有三种访问属性;类的继承方式也有公有继承、保护继承和私有继承三种。无论那

11、种继承方式,派生类中的成员都不能访问基类中的私有成员,但可以访问基类中的公有成员和保护成员。 【知识模块】 继承和派生 8 【正确答案】 C 【试题解析】 此题考查的是基类成员在派生类中的访问属性。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和 保护成员;派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都变成私有成员;派生类从基类保护继承时,基类的公有成员在派生类中变成保护成员,基类的保护成员在派生类中仍然是保护成员。根据以上分析可知,本题中只有从B类继承的 fun2()为公有属性

12、,故选 C选项。 【知识模块】 继承和派生 9 【正确答案】 D 【试题解析】 通过公有继承定义的派生类,其成员函数可以访问基类的公有成员和保护成员,但不能访问基类的私有成员。 【知识模块】 继承和派生 10 【正确答案】 A 【试题 解析】 基类的私有成员在派生类中都是不能访问的,所以选项 B、 D是错误的,基类的公有成员通过私有继承后,在派生类中变为了私有成员,只能在派生类中进行访问,而通过派生类的对象不能访问,所以选项 C也是错误的。基类的公有成员通过公有继承后,在派生类中是公有成员,所以可以通过派生对象来访问。 【知识模块】 继承和派生 11 【正确答案】 C 【试题解析】 派生类 J

13、azz不能访问基类 Music中的私有成员 title。 【知识模块】 继承和派生 12 【正确答案】 A 【试题解析】 派生类 D公有继承父类 B,所以 obj可以访问基类 B的公有,不能访问其它成员。 【知识模块】 继承和派生 13 【正确答案】 B 【试题解析】 类 Book私有继承自类 Media,所以类 Media中的公有成员函数Name()在继承类 Book中变成了私有成员函数,因而类 Book的对象 Bible不能访问私有成员函数 Name()。 【知识模块】 继承和派生 14 【正确答案】 C 【试题解析】 此题考查的是派生类对象的构造。建立派生类对象时,构造函数的执行顺序是:

14、执行基类的构造函数,调用顺序按 照各个基类被被继承时声明的顺序;执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序;执行派生类的构造函数。此题中,在建立派生类 Derived的对象 d1时会先调用基类 Base的构造,调用的是默认构造函数,输出字符 A;然后调用自身的构造函数,输出 B:故程序的输出结果是: AB。 【知识模块】 继承和派生 15 【正确答案】 C 【试题解析】 此题考查的是继承和派生。无论使用哪种继承方式,派生类中的成员都不能访问基类中的私有成员,而可以访问基类中的公有成员和保护成员,所以选项 A错误: C+中只有抽象类不能被实例化,而虚基类不一定非得是抽象类,

15、所以选项 B错误;在派生类中可以重新定义从基类继承下来的虚函数,也可以不重新定义,故选项 D错误。 【知识模块】 继承和派生 16 【正确答案】 A 【试题解析】 在基类 AA的默认构造函数中,输出字符 1,在继承类 BB的默认构造函数中,输出字符 2,在带有参数 n的构造函数中,输出字符 3。在主函数中,在创建 BB的对象 b(4)时,会首先调用基类 AA的构造函数输出字符 1,再调用类 BB带参数的构造函数输出字符 3。在创建 BB的对象 c时,会首先调用基类AA的构造函数输出字符 1,再调用类 BB默认的构造函数输出字符 2。所以程序输出的结果为 1312。 【知识模块】 继承和派生 1

16、7 【正确答案】 A 【试题解析】 因为派生类从基类中继承,它含有基类中的数据成员和函数成员,所以当生成派生类对象时,能无条件的调用基类的构造函数。 【知识模块】 继承和派生 18 【正确答案】 C 【试题解析】 基类的构造函数是带有参数的,派生类从基类派生,这就需要在派生类的构造函数名后面显示的调用基类的构造函数。 【知识模块】 继承和派生 19 【正确答案】 C 【试题解析】 虚基类是为了消除由多重继承产生的二义性而提出的。虚基类的说明格式是: Class: vinual,其中关键字 virtual与继承方式的位置无关,但必须位于基类名之前,且 virtual只对紧随其后基类名起作用。对于

17、本题来说,声明 “classB: vinual public A”说明类 A为虚基类。 【知识模块】 继承和派生 20 【正确答案】 B 【试题解析】 此题考查的是虚函数的概念。在成员 函数的声明前面加上 Virual关键字,即可把函数声明为虚函数。虚函数可以是另一个函数的友元函数而不能是静态成员函数。 【知识模块】 继承和派生 21 【正确答案】 A 【试题解析】 此题考查的是多态性。在 C+中,一个基类指针可以用于指向它的派生类对象,而且通过这样的指针调用虚函数时,被调用的是该指针实际所指向的对象类的那个重定义版本。在实函数的情况下。通过基类指针所调用的只能是基类的那个函数版本,无法调用到

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

19、参是 基类对象, fun2()调用类 B中的 show()输出字符 B; fun3()由于形参是基类对象,调用的始终都是基类的 show(),输出字符 B。故最终输出结果是 DBB。 【知识模块】 继承和派生 23 【正确答案】 A 【试题解析】 在 C+中,多态性可以分为两类:编译时的多态性和运行时的多态性。编译时的多态性是通过函数重载和模版体现的,运行时的多态性是通过虚函数体现的。 【知识模块】 继承和派生 24 【正确答案】 D 【试题解析】 因为类 Book继承自基类 Publication,所以在类 Book中的虚常成员函数 *getTpye()return”书 ”; 就会覆盖基类中

20、的虚常成员函数*getType()constreturn“未知类型 “; ,所以在主函数中调用函数showPublication(book)时, getType()函数的输出的结果是 “书 ”, getName()函数的输出结果为 “精彩人生 ”。 【知识模块】 继承和派生 25 【正确答案】 B 【试题解析】 由于函数 Display()是一个纯虚函数,所以类 Instrument是抽象类,而抽象类是不能定义 对象的,因而选项 B为正确选项。 【知识模块】 继承和派生 26 【正确答案】 D 【试题解析】 在基类 Base中定义了虚函数 Show()输出字符 B,而在派生类Derived中对虚函数 Show()进行了重新定义,输出字符 D。在主函数中对基类和派生类中的虚函数 Show(1)进行了多态调用,此时调用的是派生类中重新定义的Show(),输出字符 D。 【知识模块】 继承和派生

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