国家二级C++机试(继承和派生)模拟试卷6(题后含答案及解析)_第1页
国家二级C++机试(继承和派生)模拟试卷6(题后含答案及解析)_第2页
国家二级C++机试(继承和派生)模拟试卷6(题后含答案及解析)_第3页
国家二级C++机试(继承和派生)模拟试卷6(题后含答案及解析)_第4页
国家二级C++机试(继承和派生)模拟试卷6(题后含答案及解析)_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

国家二级C++机试(继承和派生)模拟试卷6(题后含答案及解析)题型有:1.选择题选择题1.有如下类声明:classXA{intx;public:XA(intn){x=n;)};classXB:publicXA{inty;public:XB(inta,intb);};在构造函数XB的下列定义中,正确的是()。A.XB::XB(inta,intb):x(a),y(b){}B.XB::XB(inta,intb):XA(a),y(b){}C.XB::XB(inta,intb):x(a),XB(b){}D.XB::XB(inta,intb):XA(a),XB(b){}正确答案:B解析:此题考查的是派生类中构造函数的定义。派生类的构造首先要调用基类的构造函数,对基类成员初始化;然后对派生类中的新增成员初始化。格式为:派生类名(构造函数形参表)基类构造函数(形参表)。知识模块:继承和派生2.有如下程序:#inc1ude<iostream>usingnamespacestd;classBASEfpublic:~BASE(){cout<<”BASE”;}};classDERIVED:publicBASE{public:~DERIVED(){cout<<”DERIVED”;}};intmain(){DERIVEDx;return0;}执行后的输出结果是()。A.BASEB.DERIVEDC.BASEDERIVEDD.DERIVEDBASE正确答案:D解析:此题考查的是派生类的定义和使用。当对象被删除时,派生类的析构函数就被执行。由于析构函数不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。知识模块:继承和派生3.下列有关继承和派生的叙述中,正确的是()。A.如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员B.派生类的成员函数可以访问基类的所有成员C.基类对象可以赋值给派生类对象D.如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类正确答案:D解析:此题考查的是继承和派生。无论是哪种继承方式,派生类都能够访问基类的公有和保护成员,而不能访问基类的私有成员,故选项A和B错误:公有继承时,基类的对象不可作为派生类的对象处理,即基类对象不可赋值给派生类对象,所以选项C错误。知识模块:继承和派生4.下列有关类继承的叙述中,错误的是()。A.继承可以实现软件复用B.虚基类可以解决由多继承产生的二义性问题C.派生类构造函数要负责调用基类的构造函数D.派生类没有继承基类的私有成员正确答案:D解析:此题考查的是类继承。派生类继承了基类的(全部数据成员,私有成员),只是基类的私有成员在派生类中是隐藏的,只能在基类内部访问,故选项D错误。知识模块:继承和派生5.在下列关键字中,不能用来表示继承方式的是()。A.privateB.staticC.publicD.protected正确答案:B解析:此题考查的是继承方式。继承方式有私有(private)、保护(protected)、公有(public)三种。知识模块:继承和派生6.在类声明中,紧跟在“public:”后声明的成员的访问权限是()。A.私有B.公有C.保护D.默认正确答案:B解析:类中提供了3种访问控制的权限:公有,私有和保护。其中公有类型定义了类的外部接口,任何一个外部的访问都必须通过外部接口进行。私有类型的成员只允许本类的成员函数访问,来自类外部的任何访问都是非法的,保护类型介于公有类型和私有类型之间,在继承和派生时可以体现出其特点。知识模块:继承和派生7.定义派生类时,若不使用关键字显式地规定采用何种继承方式,则默认方式为()。A.私有继承B.非私有继承C.保护继承D.公有继承正确答案:A解析:继承的方式包括三种:公有继承,保护继承和私有继承。如果不显示的给出继承方式,缺省的类继承方式是私有继承private。知识模块:继承和派生8.有如下类定义:classXX{intxx;public:XX():xx(0){cout<<’A’;}XX(intn):xx(n){cout<<’B’;)};classYY:publicXX{intyy;public:YY():yy(0){cout<<yy;}YY(intn):XX(n+l),yy(n){cout<<yy;)YY(intm,intn):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.有如下类定义:classXX{intxdata;public:XX(intn=0):xdata(n){}};classYY:publicXX{intydata;public:YY(intm=0,intn=0):XX(m),ydata(n){}};YY类的对象包含的数据成员的个数是()。A.1B.2C.3D.4正确答案:B解析:因为类XX包括…个数据成员xdata,而类YY继承自类XX,所在类YY中也包含数据成员xdata,同时类YY中也定义了其本身的数据成员ydata,因而YY类的对象包含的数据成员的个数是2。知识模块:继承和派生10.下列关于继承方式的描述中,错误的是()。A.如果不显武地指定继承方式,缺省的继承方式是私有(private)B.采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员C.采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员D.采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员正确答案:D解析:基类中的私有成员在派生类中是隐蔽的,只能在基类内部访问。派生类中的成员不可以访问基类中的私有成员,只可以访问基类中的公有成员和保护成员。知识模块:继承和派生11.下列代码段声明了3个类classPerson{};classStudent:publicPerson{};classUndergraduate: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.classCar:vehic1e{/*类体略*/};B.classCar:publiccar{/*类体略*/};C.classCar:publicVehic1e{/*类体略*/);D.classCar:virtualpublicVehic1e{/*类体略*/).正确答案:B解析:类Car不能派生自它本身。知识模块:继承和派生14.下列描述中,错误的是()。A.公有继承时基类中的公有成员在派生类中仍是公有成员B.公有继承时基类中的保护成员在派生类中仍是保护成员C.保护继承时基类中的公有成员在派生类中仍是公有成员D.保护继承时基类中的保护成员在派生类中仍是保护成员正确答案:C解析:保护继承时基类中的公有成员在派生类中是保护成员。知识模块:继承和派生15.当派生类继承一个基类时,默认的继承方式为()。A.publicB.protectedC.privateD.不确定正确答案:C解析:派生类继承…个基类时,默认的继承方式为private。知识模块:继承和派生16.下列关于派生类的叙述中,错误的是()。A.派生类至少要有一个基类B.派生类中包括了从基类继承的成员C.一个派生类可以作为另一个派生类的基类D.基类成员被派生类继承以后访问权限保持不变正确答案:D解析:派生类对象对基类成员的访问权限:①对于公有继承,只有基类的公有成员可以被派生类对象访问,其他(保护和私有)成员不能被访问。②对于私有继承和保护继承,基类中所有成员都不能被派生类对象访问。派生类对基类成员的访问权限:①对于公有继承,基类中公有成员和保护成员可以访问,而基类中私有成员不能被访问。②对于私有继承和保护继承,也是基类中的公有成员和保护成员可以被派生类访问,而基类中的私有成员不能被访问。知识模块:继承和派生17.有如下类声明:classMyBASE{intk:public:voidset(intn){k=n;}intget()const{returnk;}};classMyDERIVED:protectedMyBASE{protected:intj;public:voidset(intm,intn){MyBASE::set(m);j=n;}intget()const{returnMyBASE::get()+j;}};则类MyDERIVED中保护的数据成员和成员函数的个数是()。A.4B.3C.2D.1正确答案:B解析:此题考查的是派生与继承中的访问权限。protected派生:private一>不可见;protected一>private;public一>protected.知识模块:继承和派生18.有如下程序:#inc1ude<iostream>usingnamespacestd;classBase{public:voidfun(){cout<<”Base::fun”<<endl;}};classDerived:publicBase{public:,voidfun(){cout<<”Derived::fun”<<endl;}};intmain(){Derivedd:d.mn();return0;}己知其执行后的输出结果为:Base::funDerived::fun则程序中下划线处应填入的语句是()。A.Base.fun();B.Base::fun();C.Base一>fun();D.mn();正确答案:B解析:此题考查的是继承的使用。分析题目可知,横线处应填入对基类成员函数fun()的调用语句,此处只能使用作用域运算符“::”才能调用到基类的同名函数,故选项B正确。知识模块:继承和派生19.有如下程序:#inc1ude<iostream>usingnamespacestd;classBase{prVate:Voidmnl()const{cout<<”fun1”;}proteCted:Voidfun2()const{cout<<”mn2¨;}public:Voidfun3()const{cout<<”fun3”;}};classDeriVed:prOteCtedBaSe{public:Voidfun4()const{cout<<”fIun4”;}};intmain(){DeriVedobj;obj.fun1();//①obj.fun2();//②obj.fun3();//③obj.fun4();//④reurnO:}其中有语法错误的语句是()。A.①②③④B.①②③C.②③④D.①④正确答案:B解析:此题考查的是保护继承。因为Derived以protected方式继承了Base类,所以父类Base中的公有成员和保护成员均成了Derived类的保护成员,而Base类的私有成员Derived类不可访问。所以,主函数中通过Derived类的对象只能够访问到Derived类的公有成员。知识模块:继承和派生20.在公有继承的情况下,允许派生类直接访问的基类成员包括()。A.公有成员B.公有成员和保护成员C.公有成员、保护成员和私有成员D.保护成员正确答案:B解析:此题考查的是派生类对基类成员的访问。基类的成员有公有、保护和私有三种访问属性;类的继承方式也有公有继承、保护继承和私有继承三种。无论那种继承方式,派生类中的成员都不能访问基类中的私有成员,但可以访问基类中的公有成员和保护成员,知识模块:继承和派生21.有如下类定义:classMyBase{intk;publiC:MyBase(intn=0):k(n){}intvalue()const{retumk;}};classMyDeriVed:MyBase{intj;public:MyDerived(inti):j(i){}intgetK()const{returnk;)mtgeU()const{returnj;}};编译时发现有一处语法错误,对这个错误最准确的描述是()。A.函数getK试图访问基类的私有成员变量kB.在类MyDerived的定义中,基类名MyBase前缺少关键字public、protected或privateC.类MyDerived缺少一个无参的构造函数D.类MyDerived的构造函数没有对基类数据成员k进行初始化正确答案:A解析:此题考查的是派生类对基类成员的访问。因为类中缺省的访问权限是私有,所以本题中MyBase类中定义的成员k是私有成员。派生类中的成员只能访问基类中的公有成员和保护成员,不能访问基类中的私有成员。所以派生类中函数getKO中的语句returnk;是非法的。知识模块:继承和派生22.派生类的成员函数不能访问基类的()。A.公有成员和保护成员B.公有成员C.私有成员D.保护成员正确答案:C解析:此题考查的是派生类对基类成员的访问。派生类对基类的各个成员的访问能力与继承方式无关,其成员不能访问基类中的私有成员,可以访问基类的公有成员和保护成员。知识模块:继承和派生23.若有如下类定义:classB{voidfunl(){}protected:doublevarl;public:voidfun2(){}};classD:publicB{protected:voidfun3(){}};已知obj是类D的对象,下列句中不违反类成员访问控制权限的是()。A.obj.fun1();B.obj.varl;C.obj.fun2();D.obj.fun3();正确答案:C解析:此题考查的是基类成员在派生类中的访问属性。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员;派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都变成私有成员;派生类从基类保护继承时,基类的公有成员在派生类中变成保护成员,基类的保护成员在派生类中仍然是保护成员。根据以上分析可知,本题中只有从B类继承的fun2()为公有属性,故选C选项。知识模块:继承和派生24.有如下类声明:classBase{protected;intamount,public;Base(intn

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论