版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
國(guó)家二級(jí)C++機(jī)試(繼承和派生)模擬試卷1(共9套)(共197題)國(guó)家二級(jí)C++機(jī)試(繼承和派生)模擬試卷第1套一、選擇題(本題共23題,每題1.0分,共23分。)1、有如下程序:#include<iostream>usingnamespacesta;classA{public:A(){cout<<’A’;}~A(){cout<<’C’;}};classB:publicA{public:B(){cout<<’G’;}~B(){cout<<’T’;}};intmain(){Bobj;return0;}運(yùn)行這個(gè)程序的輸出結(jié)果是()。A、GATCB、AGTCC、GACTD、AGCT標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:派生類B是由基類A公開(kāi)繼承而來(lái),所以在創(chuàng)建類B的obi對(duì)象時(shí),首先執(zhí)行基類A的構(gòu)造函數(shù)A(),輸出A,再執(zhí)行派生類B的構(gòu)造函數(shù)B(),輸出G,當(dāng)程序結(jié)束時(shí),首先執(zhí)行派生類的析構(gòu)函數(shù)~B(),輸出T,再執(zhí)行基類A的析構(gòu)函數(shù)~A(),輸出C。2、有如下程序:#include<iostream>usingnamespacestd;classBase{public:voidfun0{tout<<’B’;}};classDerived:publicBase{public:voidfun(){____cout<<’D’;}};intmain(){Derivedd;d.fun();return0;}若程序的輸出結(jié)果是BD,則劃線處缺失的部分是()。A、fun();B、Base.fun();C、Base::fun();D、Base->fun();標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:派生類Derived的對(duì)象d調(diào)用其成員函數(shù)fun(),要輸出結(jié)果為BD,所以在其成員函數(shù)fun()中要調(diào)用基類Base的成員函數(shù)fun()。3、下列關(guān)于虛基類的描述中,錯(cuò)誤的是()。A、使用虛基類可以消除由多繼承產(chǎn)生的二義性B、構(gòu)造派生類對(duì)象時(shí),虛基類的構(gòu)造函數(shù)只被調(diào)用一次C、聲明“classB:virtualpublicA”說(shuō)明類B為虛基類D、建立派生類對(duì)象時(shí),首先調(diào)用虛基類的構(gòu)造函數(shù)標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:虛基類是為了消除由多重繼承產(chǎn)生的二義性而提出的。虛基類的說(shuō)明格式是:Class<類名>:virtual<繼承方式><基類名>,其中關(guān)鍵字virtual與繼承方式的位置無(wú)關(guān),但必須位于基類名之前,且virtual只對(duì)緊隨其后基類名起作用。對(duì)于本題來(lái)說(shuō),聲明“classB:virtualpublicA”說(shuō)明類A為虛基類。4、有如下程序:#include<iostream>usingnamespacestd;classMountain{intheight;public:Mountain(inth=-):height(h){}virtualehar*GetName()const{return’’山’’;}intGetHeight()const{returnheight;}};classLushan:publicMountain{Public:Lushan(intd):Mountain(d){}Char*GetName()const{return’’廬山’’;}};intmain(){Mountain*p=newLushan(1000);cout<<p->GetName()<<’海拔’’<<p->GetHeight()<<’’米’’;return0;}運(yùn)行這個(gè)程序的輸出結(jié)果是()。A、廬山海拔1000米B、廬山海拔0米C、山海拔1000米D、山海拔0米標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:在基類Mountain中定義了虛函數(shù)GetName()輸出字符串“山”,而在派生類Lushan中對(duì)虛函數(shù)GetName()進(jìn)行了重新定義,輸出字符串“廬山”。在主函數(shù)中對(duì)派生類中的虛函數(shù)GetName()進(jìn)行了多態(tài)調(diào)用,此時(shí)調(diào)用的是派生類中重新定義的GetName(),輸出字符字符串“廬山”。5、在C++中,用于實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)性的是()。A、內(nèi)聯(lián)函數(shù)B、重載函數(shù)C、模板函數(shù)D、虛函數(shù)標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:此題考查的是虛函數(shù)的概念。C++語(yǔ)言的多態(tài)性有兩種:函數(shù)重載和虛函數(shù)。虛函數(shù)只有在運(yùn)行時(shí)才能被確定,稱為運(yùn)行時(shí)多態(tài)。編譯時(shí)的多態(tài)是通過(guò)函數(shù)重載和模板實(shí)現(xiàn)的。6、有如下程序:#include<iostream>usingnamespacestd;classBase{public:voidfun1(){cout<<’’Base\n’’;}virtualvoidfun2(){cout<<’’Base\n’’;}};classDerived:publicBase{public:voidfun1(){cout<<’’Derived\n’’;}voidfun2(){cout<<’’Derived\n’’;}};voidf(Base&b){b.fun1();b.fun2();}intmain(){Derivedobj;f(obj);return0:}執(zhí)行這個(gè)程序的輸出結(jié)果是()。A、BaseBaseB、BaseDerivedC、DerivedBaseD、DerivedDerived標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是虛函數(shù)的概念。在C++語(yǔ)言中,一個(gè)派生類的對(duì)象可以被它的任何一個(gè)基類的指針?biāo)赶?,若基類和派生類中存在一模一樣的成員函數(shù)。那么通過(guò)該基類指針調(diào)用這樣的成員函數(shù)時(shí),若這個(gè)成員函數(shù)被定義成虛函數(shù),那么就調(diào)用派生類中的;否則就調(diào)用基類中的。本題中,在f()函數(shù)中,形參b是一個(gè)基類的引用,它引用的是主函數(shù)中定義的派生類對(duì)象obj,所以在調(diào)用fun1()時(shí),運(yùn)行的是基類的版本,而fun2()運(yùn)行的是派生類的版本。7、有如下程序#include<iostream>usingnamespacestd;classA{public:virtualvoidfunc1(){cout<<’’A1’’;}voidfunc2(){cout<<’’A2’’;}};classB:publicA{public:voidfunc1(){cout<<’’B1’’;}voidfunc2(){cout<<’’B2’’;}};intmain(){A*p=newB;p->func1();p->func2();return0;}運(yùn)行此程序,屏幕上將顯示輸出()。A、B182B、A1A2C、B1A2D、A182標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是虛函數(shù)的概念。此題中,func1是虛函數(shù),func2是一般成員函數(shù),而且在派生類與基類中都存在兩個(gè)這樣的函數(shù)。在主函數(shù)中,語(yǔ)句A*p=newB;定義了一個(gè)基類的指針p,并讓它指向一個(gè)派生類對(duì)象。所以通過(guò)該指針調(diào)用func1時(shí),運(yùn)行的是派生類的版本,而通過(guò)該指針調(diào)用func2運(yùn)行的是基類的版本。所以程序運(yùn)行的最后輸出是:B1A2。8、如果不使用多態(tài)機(jī)制,那么通過(guò)基類的指針雖然可以指向派生類對(duì)象,但是只能訪問(wèn)從基類繼承的成員。有如下程序,沒(méi)有使用多態(tài)機(jī)制。#include<iostream>usingnamespacestd;classBase{inta,b;public:Base(intx,inty){a=x;b=y;}voidshow(){cout<<a<<’,’<<b<<end1;}};classDerived:publicBase{intc,d;public:Derived(intx,inty,intz,intm):Base(x,y){c=z;d=m;}voidshow(){cout<<c<<’,’<<d<<endl;}};intmain(){BaseB1(50,50),*pb;DerivedD1(10,20,30,40);pb=&D1;return0;return();}運(yùn)行時(shí)輸出的結(jié)果是()。A、10,20B、30,40C、20,30D、50,50標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:此題考查的是多態(tài)性。在C++中,一個(gè)基類指針可以用于指向它的派生類對(duì)象,而且通過(guò)這樣的指針調(diào)用虛函數(shù)時(shí),被調(diào)用的是該指針實(shí)際所指向的對(duì)象類的那個(gè)重定義版本。在實(shí)函數(shù)的情況下。通過(guò)基類指針?biāo){(diào)用的只能是基類的那個(gè)函數(shù)版本,無(wú)法調(diào)用到派生類中重定義函數(shù)。此題中,通過(guò)指針pb所調(diào)用的是基類的版本,即輸出a和b的值10,20。9、虛函數(shù)支持多態(tài)調(diào)用,一個(gè)基類的指針可以指向派生類的對(duì)象,而且通過(guò)這樣的指針調(diào)用虛函數(shù)時(shí),被調(diào)用的是指針?biāo)傅膶?shí)際對(duì)象的虛函數(shù)。而非虛函數(shù)不支持多態(tài)調(diào)用。有如下程序:#include<iostream>usingnamespacestd;classBase{public:virtualvoidf(){cout<<’’f()+’’;}voidg(){cout<<’’g0+’’;}};classDerived:publicBase{public:voidf(){cout<<’’f+’’;}voidgo{cout<<,’’g+’’;}};intmain{Derivedd;Base*p=&d;p->f();p->g();return0;}運(yùn)行時(shí)輸出的結(jié)果是()。A、f+g+B、f0+g+C、f+g0+D、f0+g0+標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是虛函數(shù)和多態(tài)性。此題中,因?yàn)閒()是虛函數(shù)具有多態(tài)性,所以通過(guò)指針p調(diào)用的f()是派生類Derived中定義的f():而g()不是虛函數(shù),通過(guò)指針p調(diào)用的是Base中的g()。10、有如下程序;#include<iostream>usingnamespacestd;classBase{public:voidoutput(){cout<<1;}virtualvoidPrint(){cout<<’B’;}};classDerived:publicBase{public:voidoutput(){cout<<2;}voidPrint(){cout<<’D’;}};intmain(){Base*ptr=newDerived;ptr->output();ptr->Print();deleteptr;return0;}程序的輸出結(jié)果是()。A、1BB、1DC、2BD、2D標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是虛函數(shù)與多態(tài)性。在成員函數(shù)的聲明前面加上virual關(guān)鍵字,即可把函數(shù)聲明為虛函數(shù):在C++中,一個(gè)基類指針可以用于指向它的派生類對(duì)象,而且通過(guò)這樣的指針調(diào)用虛函數(shù)時(shí),被調(diào)用的是該指針實(shí)際所指向的對(duì)象類的那個(gè)重定義版本。本題中,從基類的定義可以看出:output()函數(shù)是普通成員函數(shù),而Print()函數(shù)是虛函數(shù)。所以,通過(guò)ptr指針調(diào)用的output()是基類中的output(),而通過(guò)它調(diào)用的Print()則是派生類中的Print()。11、有如下程序;#include<iostream>usingnamespacestd;classB{public:virtualvoidshow(){cout<<’’B’’;}};classD:publicB{public:voidshow(){cout<<’’D’’;}};voidfunl(B*ptr){ptr->show();}voidfun2(B&ref){ref.show0;}voidfun3(Bb){b.show();}intmain(){Bb,*p=newD;Dd;fun1(p);fun2(b);fun3(d);return0;}程序的輸出結(jié)果是()。A、BBBB、BBDC、DBBD、DBD標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是虛函數(shù)與多態(tài)性。在成員函數(shù)的聲明前面加上virual關(guān)鍵字,即可把函數(shù)聲明為虛函數(shù):在C++中,一個(gè)基類指針可以用于指向它的派生類對(duì)象,而且通過(guò)這樣的指針調(diào)用虛函數(shù)時(shí),被調(diào)用的是該指針實(shí)際所指向的對(duì)象類的那個(gè)重定義版本。此題中,fun1()和fun2()的形參分別是基類的指針和引用,給fun1()傳入的實(shí)參是指向派生類對(duì)象的指針p,funl()將調(diào)用D類中的show()輸出字符‘D’;給fun2()出入的實(shí)參是基類對(duì)象,fun2()調(diào)用類B中的show()輸出字符‘B’;fun3()由于形參是基類對(duì)象,調(diào)用的始終都是基類的show(),輸出字符‘B’。故最終輸出結(jié)果是DBB。12、下列有關(guān)抽象類和純虛函數(shù)的敘述中,錯(cuò)誤的是()。A、擁有純虛函數(shù)的類是抽象類,不能用來(lái)定義對(duì)象B、抽象類的派生類若不實(shí)現(xiàn)純虛函數(shù),它也是抽象類C、純虛函數(shù)的聲明以’’=0;"結(jié)束D、純虛函數(shù)都不能有函數(shù)體標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:此題考查的是抽象類和純虛函數(shù)的概念。純虛函數(shù)可以有函數(shù)體,它的實(shí)現(xiàn)由派生類給出。13、有如下程序:#include<iostream>usingnamespacestd;classGA{public;virtualintf(){return1;}};classGB:publicGA{public;virtualintf(){return2;}};voidshow(GAg){cout<<g.f();}voiddisplay(GA&g){cout<<g.f();}intmain(){GAa:show(a);display(a);GBb:show(b);display(b);return0;}運(yùn)行時(shí)的輸出結(jié)果是()。A、1111B、1211C、1112D、1212標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查派生類與虛函數(shù)的考查。由主函數(shù)main入手,其中分別定義了類GA和GB的對(duì)象a和b。首先,執(zhí)行參數(shù)a的show函數(shù)調(diào)用,其中的輸出語(yǔ)句為調(diào)用GA類中的f()虛函數(shù),返回1。同理display(a)函數(shù)輸出1。show(b)函數(shù)中調(diào)用的為GA中的f()函數(shù),display(b)調(diào)用GA中f()函數(shù),返回1,display(b)調(diào)用GB中的f()函數(shù)返回2。所以最后輸出為1112。14、下列選項(xiàng)中,與實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)性無(wú)關(guān)的是()。A、重載函數(shù)B、虛函數(shù)C、指針D、引用標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:在C++中,多態(tài)性可以分為兩類:編譯時(shí)的多態(tài)性和運(yùn)行時(shí)的多態(tài)性。編譯時(shí)的多態(tài)性是通過(guò)函數(shù)重載和模版體現(xiàn)的,運(yùn)行時(shí)的多態(tài)性是通過(guò)虛函數(shù)體現(xiàn)的。15、在一個(gè)抽象類中,一定包含有()。A、虛函數(shù)B、純虛函數(shù)C、模板函數(shù)D、重載函數(shù)標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:擁有純虛函數(shù)的類叫做抽象類,所以抽象類中必然包含有虛函數(shù)。16、有如下程序:#include<iostream>usingnamespacestd;classA{publicvirtualvoidf(){cout<<1;}voidg(){cout<<2;}};classB:PubliCA{public:virtualvoidf(){cout<<3;}voidg(){cout<<4;}};voidshow(A&a){a.f();a.g();}intmain(){Bb:show(b);return0:}運(yùn)行時(shí)的輸出結(jié)果是()。A、12B、34C、14D、32標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:在派生類classB中對(duì)基類中的虛擬成員函數(shù)virtualvoidf()和實(shí)函數(shù)voidg()進(jìn)行了重新定義,在主函數(shù)中通過(guò)語(yǔ)句show(b);調(diào)用派生類中的虛函數(shù)virtualvoidf(){cout<<3;}輸出3,調(diào)用基類的實(shí)函數(shù)voidg(){cout<<2;}輸出2。所以選項(xiàng)D為正確答案。17、有如下程序:#include<iostream>usingnamespacestd;classPublication{//出版物類charname[30];Publication(char*name=’’未知名稱’’){strcpy(this->name,name);}constchar*getName()const{returnname;}virtualconstchar*getType()const{return’’未知類型’’;}classBook:publicPublication{//書類Book(char*name):Publication(name){}virtualconstchar*getTypeoconst{return’’書’’;}voidshowPublication(Publication&p){cout<<p.getType()<<’’:’’<<p.getName()<<end1;}intmain(){Bookbook(’’精彩人生’’);showPublication(book);return0:}運(yùn)行時(shí)的輸出結(jié)果是()A、未知類型:未知名稱B、未知類型:精彩人生C、書:未知名稱D、書:精彩人生標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:因?yàn)轭怋ook繼承自基類Publication,所以在類Book中的虛常成員函數(shù)*getType(){return’’書’’;}就會(huì)覆蓋基類中的虛常成員函數(shù)*getType()const{return’’未知類型’’;},所以在主函數(shù)中調(diào)用函數(shù)showPublication(book)時(shí),getType()函數(shù)的輸出的結(jié)果是“書”,getName()函數(shù)的輸出結(jié)果為“精彩人生”。18、下面是類shape的定義:classShape{public:VirtualvoidDraw()=0;};下列關(guān)于Shape類的描述中,正確的是()。A、類Shape是虛基類B、類Shape是抽象類C、類ShaDe中的Draw函數(shù)聲明有誤D、語(yǔ)句’’Shapes;’’能夠建立Shape的一個(gè)對(duì)象s標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:因?yàn)轭怱hape中包含純虛函數(shù)Draw(),所以類Shape是抽象類。19、有如下程序:#include<iostream>usingnamespacestd;classInstrument{public:virtualvoidDisplay():0;};classPiano:publicInstrument{Public:voidDisplay(){/*函數(shù)體程序略*/)};intmain(){Instruments;Instrument*p=0;//…;return0;}下列敘述中正確的是()。A、語(yǔ)句’’Insturment*p=0;"編譯時(shí)出錯(cuò)B、語(yǔ)句’’Instruments;’’編譯時(shí)出錯(cuò)C、類Piano中的Display函數(shù)不是虛函數(shù)D、類Instrument是一個(gè)虛基類標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:由于函數(shù)Display()是一個(gè)純虛函數(shù),所以類Instrument是抽象類,而抽象類是不能定義對(duì)象的,因而選項(xiàng)B為正確選項(xiàng)。20、有如下程序:#include<iostream>usingnamespacestd;classBase{public:virtualvoidfunction1(){tout<<’0’;}voidfunction2(){cout<<’1’;}};classDerived:publicBase{public:voidfunction1(){tout<<’2’;}voidfunction2(){cout<<’3’;}};intmain(){Base*p=newDerived();p->function1();p->function2();return0;};運(yùn)行時(shí)的輸出結(jié)果是()。A、01B、21C、03D、23標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:函數(shù)function1()在基類Base中定義為虛成員函數(shù),而在派生類Dervied中重新進(jìn)行了定義,輸出字符2,函數(shù)function2()在基類Base中定義虛成員函數(shù),在主函數(shù)中使用指向基類的指針變量p訪問(wèn)function2()時(shí),輸出1。21、有如下程序:#include<iostream>usingnamespacestd;classBase{public:virtualvoidShow(){cout<<’B’;}};classDerived:publicBase{public:voidShow(){cout<<’D’;}};intmain(){Base*p1=newDerived;Derived*p2=new.Derived;p1->Show();p2->Show();deletep1;deletep2;return0;}運(yùn)行這個(gè)程序的輸出結(jié)果是()。A、BBB、BDC、DBD、DD標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:在基類Base中定義了虛函數(shù)Show()輸出字符‘B’,而在派生類Derived中對(duì)虛函數(shù)Show()進(jìn)行了重新定義,輸出字符‘D’。在主函數(shù)中對(duì)基類和派生類中的虛函數(shù)Show()進(jìn)行了多態(tài)調(diào)用,此時(shí)調(diào)用的是派生類中重新定義的Show(),輸出字符‘D’。22、有如下類定義classAnimal{public;virtualvoidName()=0;};classKoala:publicAnimal{public:voidName(){/*函數(shù)體略*/)};關(guān)于上述類定義,下列描述中錯(cuò)誤的是()。A、類Koala是類Animal的派生類B、類Koala中的Name函數(shù)是一個(gè)虛函數(shù)C、類Animal中的Name函數(shù)是一個(gè)純虛函數(shù)D、語(yǔ)句“Animala;”能夠建立類Animal的一個(gè)對(duì)象a標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:在類Animal定義了純虛函數(shù)Name(),所以類Animal就是一個(gè)抽象類,而抽象類是不能夠建立對(duì)象的。23、有如下程序:#include<iostream>usingnamespacestd;classB{public:virtualvoidf(){cout<<’’B’’;}voidg(){cout<<’’B’’;}};classD:publicB{public:voidf(){cout<<’’D’’;}voidg(){cout<<’’D’’;}};voidh(B*p){p->f();p->g();}intmain(){Dobj;h(&obj);return0;}運(yùn)行這個(gè)程序的輸出結(jié)果是()。A、DDB、BBC、BDD、DB標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:在基類B中定義虛函數(shù)f()和成員函數(shù)g(),而在派生類D中定義了函數(shù)f()和同名函數(shù)g()。而函數(shù)h中的形參為指向基類的指針變量p,所以在主函數(shù)中執(zhí)行h(&obj)時(shí),會(huì)調(diào)用派生類的函數(shù)f(),輸出D,再調(diào)用基類的函數(shù)g(),輸出B。國(guó)家二級(jí)C++機(jī)試(繼承和派生)模擬試卷第2套一、選擇題(本題共22題,每題1.0分,共22分。)1、有如下程序:#includeusingnamespacestd;classBASE{public:~BASE(){cout<<”BASE”;}};classDERIVED:publicBASE{public:~DERIVED(){cout<<”DERIVED”;}};intmain(){DERIVEDx;return0;}執(zhí)行后的輸出結(jié)果是()。A、BASEB、DERIVEDC、BASEDERIVEDD、DERIVEDBASE標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:此題考查的是派生類的定義和使用。當(dāng)對(duì)象被刪除時(shí),派生類的析構(gòu)函數(shù)就被執(zhí)行。由于析構(gòu)函數(shù)不能被繼承,因此在執(zhí)行派生類的析構(gòu)函數(shù)時(shí),基類的析構(gòu)函數(shù)也將被調(diào)用。執(zhí)行順序是先執(zhí)行派生類的析構(gòu)函數(shù),再執(zhí)行基類的析構(gòu)函數(shù),其順序與執(zhí)行構(gòu)造函數(shù)的順序正好相反。2、有如下類定義:classXX{intxx;public:XX():xx(0){cout<<ˊAˊ;}XX(intn):xx(n){cout<<ˊBˊ;}};classYY:publicXX{intyy;public:YY():yy(0){cout<A、YYy1(0,0);B、YYy2(1);C、YYy3(0);D、YYy4;標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:考查的是類的繼承。選項(xiàng)A的執(zhí)行結(jié)果為B0,建立YY的對(duì)象y1,首先調(diào)用其構(gòu)造函數(shù),YY繼承于XX所以先調(diào)用的為XX的構(gòu)造函數(shù),根據(jù)輸入的參數(shù)可知輸出B,然后執(zhí)行YY的構(gòu)造函數(shù)輸出0;同理,選項(xiàng)B的執(zhí)行結(jié)果為B1,選項(xiàng)C的執(zhí)行結(jié)果為B0。3、下列代碼段聲明了3個(gè)類classPerson{};classStudent:publicPerson{};classUndergraduate:Student{};下列關(guān)于這些類之間關(guān)系的描述中,錯(cuò)誤的是()。A、類Person是類Undergraduate的基類B、類Undergraduate從類student公有繼承C、類student是類Person的派生類D、類Undergraduate是類Person的派生類標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:Student類公有繼承自Person類,Undergraduate類私有繼承自Student類。所以Undergraduate類是從Student類私有繼承的。4、有如下類聲明: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中保護(hù)的數(shù)據(jù)成員和成員函數(shù)的個(gè)數(shù)是()。A、4B、3C、2D、1標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是派生與繼承中的訪問(wèn)權(quán)限。protected派生:private->不可見(jiàn);protected->private:public->protected。5、在公有繼承的情況下,允許派生類直接訪問(wèn)的基類成員包括()。A、公有成員B、公有成員和保護(hù)成員C、公有成員、保護(hù)成員和私有成員D、保護(hù)成員標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是派生類對(duì)基類成員的訪問(wèn)?;惖某蓡T有公有、保護(hù)和私有三種訪問(wèn)屬性;類的繼承方式也有公有繼承、保護(hù)繼承和私有繼承三種。無(wú)論那種繼承方式,派生類中的成員都不能訪問(wèn)基類中的私有成員,但可以訪問(wèn)基類中的公有成員和保護(hù)成員。6、若有如下類定義:classB{voidfun1(){}protected:doublevarl;public:voidfun2(){}};classD:publicB{protected:voidfun3(){}};己知obi是類D的對(duì)象,下列句中不違反類成員訪問(wèn)控制權(quán)限的是()。A、obj.fun1();B、obj.varl;C、obj.fun2();D、obj.fun3();標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是基類成員在派生類中的訪問(wèn)屬性。派生類中的成員不能訪問(wèn)基類中的私有成員,可以訪問(wèn)基類中的公有成員和保護(hù)成員。派生類從基類公有繼承時(shí),基類的公有成員和保護(hù)成員在派生類中仍然是公有成員和保護(hù)成員;派生類從基類私有繼承時(shí),基類的公有成員和保護(hù)成員在派生類中都變成私有成員;派生類從基類保護(hù)繼承時(shí),基類的公有成員在派生類中變成保護(hù)成員,基類的保護(hù)成員在派生類中仍然是保護(hù)成員。根據(jù)以上分析可知,本題中只有從B類繼承的fun2()為公有屬性,故選C選項(xiàng)。7、對(duì)于通過(guò)公有繼承定義的派生類,若其成員函數(shù)可以直接訪問(wèn)基類的某個(gè)成員,說(shuō)明該基類成員的訪問(wèn)權(quán)限是()。A、公有或私有B、私有C、保護(hù)或私有D、公有或保護(hù)標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:通過(guò)公有繼承定義的派生類,其成員函數(shù)可以訪問(wèn)基類的公有成員和保護(hù)成員,但不能訪問(wèn)基類的私有成員。8、有如下程序:#includeusingnamespacestd;classMusic{public:voidsetTitle(char*str){strcpy(title,str);}protected:chartype[10];private:chartitle[20];};classJazz:publicMusic{public:voidset(char*str){strcpy(type,"Jazz");//①strcpy(title,str);//②}};下列敘述中正確的是()。A、程序編譯正確B、程序編譯時(shí)語(yǔ)句①出錯(cuò)C、程序編譯時(shí)語(yǔ)句②出錯(cuò)D、程序編譯時(shí)語(yǔ)句①和②都出錯(cuò)標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:派生類Jazz不能訪問(wèn)基類Music中的私有成員title。9、有如下類定義:classB{public:voidfun1(){}private:voidfun2(){}protected:voidfun3(){}};classD:publicB{protected:voidfun4(){}};若obi是類D的對(duì)象,則下列語(yǔ)句中不違反訪問(wèn)控制權(quán)限的是()。A、obj.fun1();B、obj.fun2();C、obj.fun3();D、obj.fun4();標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:派生類D公有繼承父類B,所以obj可以訪問(wèn)基類B的公有,不能訪問(wèn)其它成員。10、有如下程序#includeusingnamespacestd;classBase{protected:Base(){cout<<ˊAˊ;}Base(charc){cout<A、BB、BAC、ABD、BB標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是派生類對(duì)象的構(gòu)造。建立派生類對(duì)象時(shí),構(gòu)造函數(shù)的執(zhí)行順序是:執(zhí)行基類的構(gòu)造函數(shù),調(diào)用順序按照各個(gè)基類被被繼承時(shí)聲明的順序;執(zhí)行成員對(duì)象的構(gòu)造函數(shù),調(diào)用順序按照各個(gè)成員對(duì)象在類中聲明的順序;執(zhí)行派生類的構(gòu)造函數(shù)。此題中,在建立派生類Derived的對(duì)象d1時(shí)會(huì)先調(diào)用基類Base的構(gòu)造,調(diào)用的是默認(rèn)構(gòu)造函數(shù),輸出字符‘A’;然后調(diào)用自身的構(gòu)造函數(shù),輸出‘B’:故程序的輸出結(jié)果是:AB。11、下列有關(guān)繼承和派生的敘述中,正確的是()。A、派生類不能訪問(wèn)基類的保護(hù)成員B、作為虛基類的類不能被實(shí)例化C、派生類應(yīng)當(dāng)向基類的構(gòu)造函數(shù)傳遞參數(shù)D、虛函數(shù)必須在派生類中重新實(shí)現(xiàn)標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是繼承和派生。無(wú)論使用哪種繼承方式,派生類中的成員都不能訪問(wèn)基類中的私有成員,而可以訪問(wèn)基類中的公有成員和保護(hù)成員,所以選項(xiàng)A錯(cuò)誤:C++中只有抽象類不能被實(shí)例化,而虛基類不一定非得是抽象類,所以選項(xiàng)B錯(cuò)誤;在派生類中可以重新定義從基類繼承下來(lái)的虛函數(shù),也可以不重新定義,故選項(xiàng)D錯(cuò)誤。12、有如下程序:#includeusingnamespacestd;classAA{public:AA(){cout<<ˊ1ˊ;}};classBB:publicAA{intk:public:BB():k(0){cout<<ˊ2ˊ;}BB(intn):k(n){cout<<ˊ3ˊ;}};intmain(){BBb(4),c;return0:}運(yùn)行時(shí)的輸出結(jié)果是()。A、1312B、132C、32D、1412標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:在基類AA的默認(rèn)構(gòu)造函數(shù)中,輸出字符‘1’,在繼承類BB的默認(rèn)構(gòu)造函數(shù)中,輸出字符‘2’,在帶有參數(shù)n的構(gòu)造函數(shù)中,輸出字符‘3’。在主函數(shù)中,在創(chuàng)建BB的對(duì)象b(4)時(shí),會(huì)首先調(diào)用基類AA的構(gòu)造函數(shù)輸出字符‘1’,再調(diào)用類BB帶參數(shù)的構(gòu)造函數(shù)輸出字符‘3’。在創(chuàng)建BB的對(duì)象c時(shí),會(huì)首先調(diào)用基類AA的構(gòu)造函數(shù)輸出字符‘1’,再調(diào)用類BB默認(rèn)的構(gòu)造函數(shù)輸出字符‘2’。所以程序輸出的結(jié)果為1312。13、生成派生類對(duì)象時(shí),派生類構(gòu)造函數(shù)調(diào)用基類構(gòu)造函數(shù)的條件是()。A、無(wú)需任何條件B、基類中顯示定義了構(gòu)造函數(shù)C、派生類中顯式定義了構(gòu)造函數(shù)D、派生類構(gòu)造函數(shù)明確調(diào)用了基類構(gòu)造函數(shù)標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:因?yàn)榕缮悘幕愔欣^承,它含有基類中的數(shù)據(jù)成員和函數(shù)成員,所以當(dāng)生成派生類對(duì)象時(shí),能無(wú)條件的調(diào)用基類的構(gòu)造函數(shù)。14、已知基類Employee只有一個(gè)構(gòu)造函數(shù),其定義如下:Employee::Employee(intn):id(n){}Manager是Employee的派生類,則下列對(duì)Manager的構(gòu)造函數(shù)的定義中,正確的是()。A、Manager::Manager(intn):id(n){}B、Manager::Manager(intn){id=n;}C、Manager::Manager(intn):Employee(n){}D、Manager::Manager(intn){Employee(n);}標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:基類的構(gòu)造函數(shù)是帶有參數(shù)的,派生類從基類派生,這就需要在派生類的構(gòu)造函數(shù)名后面顯示的調(diào)用基類的構(gòu)造函數(shù)。15、下列關(guān)于虛基類的描述中,錯(cuò)誤的是()。A、使用虛基類可以消除由多繼承產(chǎn)生的二義性B、構(gòu)造派生類對(duì)象時(shí),虛基類的構(gòu)造函數(shù)只被調(diào)用一次C、聲明“classB:virtualpublicA"說(shuō)明類B為虛基類D、建立派生類對(duì)象時(shí),首先調(diào)用虛基類的構(gòu)造函數(shù)標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:虛基類是為了消除由多重繼承產(chǎn)生的二義性而提出的。虛基類的說(shuō)明格式是:Class<類名>:vinual<繼承方式><基類名>,其中關(guān)鍵字virtual與繼承方式的位置無(wú)關(guān),但必須位于基類名之前,且virtual只對(duì)緊隨其后基類名起作用。對(duì)于本題來(lái)說(shuō),聲明“classB:vinualpublicA”說(shuō)明類A為虛基類。16、下列關(guān)于虛函數(shù)的說(shuō)明中,正確的是()。A、從虛基類繼承的函數(shù)都是虛函數(shù)B、虛函數(shù)不得是靜態(tài)成員函數(shù)C、只能通過(guò)指針或引用調(diào)用虛函數(shù)D、抽象類中的成員函數(shù)都是虛函數(shù)標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是虛函數(shù)的概念。在成員函數(shù)的聲明前面加上Virual關(guān)鍵字,即可把函數(shù)聲明為虛函數(shù)。虛函數(shù)可以是另一個(gè)函數(shù)的友元函數(shù)而不能是靜態(tài)成員函數(shù)。17、如果不使用多態(tài)機(jī)制,那么通過(guò)基類的指針雖然可以指向派生類對(duì)象,但是只能訪問(wèn)從基類繼承的成員。有如下程序,沒(méi)有使用多態(tài)機(jī)制。#includeusingnamespacestd;classBase{inta,b;public:Base(intx,inty){a=x;b=y;}voidshow(){cout<A、10,20B、30,40C、20,30D、50,50標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:此題考查的是多態(tài)性。在C++中,一個(gè)基類指針可以用于指向它的派生類對(duì)象,而且通過(guò)這樣的指針調(diào)用虛函數(shù)時(shí),被調(diào)用的是該指針實(shí)際所指向的對(duì)象類的那個(gè)重定義版本。在實(shí)函數(shù)的情況下。通過(guò)基類指針?biāo){(diào)用的只能是基類的那個(gè)函數(shù)版本,無(wú)法調(diào)用到派生類中重定義函數(shù)。此題中,通過(guò)指針pb所調(diào)用的是基類的本,即輸出a和b的值10,20。18、有如下程序;#includeusingnamespacestd;classB{public:virtualvoidshow(){cout<<"B";)};classD:publicB{public:voidshow(){cout<<"D";}};voidfun1(B*ptr){ptr->show();}voidfun2(B&ref){ref.show();}voidfun3(Bb){b.show();}intmain(){Bb,*p=newD;Dd;fun1(p);fun2(b);fun3(d);return0;}程序的輸出結(jié)果是()。A、BBBB、BBDC、DBBD、DBD標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是虛函數(shù)與多態(tài)性。在成員函數(shù)的聲明前面加上virual關(guān)鍵字,即可把函數(shù)聲明為虛函數(shù);在C++中,一個(gè)基類指針可以用于指向它的派生類對(duì)象,而且通過(guò)這樣的指針調(diào)用虛函數(shù)時(shí),被調(diào)用的是該指針實(shí)際所指向的對(duì)象類的那個(gè)重定義版本。此題中,fun1()和fun2()的形參分別是基類的指針和引用,給fun1()傳入的實(shí)參是指向派生類對(duì)象的指針p,fun1()將調(diào)用D類中的show()輸出字符‘D’;給fun2()出入的實(shí)參是基類對(duì)象,fun2()調(diào)用類B中的show()輸出字符‘B’;fun3()由于形參是基類對(duì)象,調(diào)用的始終都是基類的show(),輸出字符‘B’。故最終輸出結(jié)果是DBB。19、下列選項(xiàng)中,與實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)性無(wú)關(guān)的是()。A、重載函數(shù)B、虛函數(shù)C、指針D、引用標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:在C++中,多態(tài)性可以分為兩類:編譯時(shí)的多態(tài)性和運(yùn)行時(shí)的多態(tài)性。編譯時(shí)的多態(tài)性是通過(guò)函數(shù)重載和模版體現(xiàn)的,運(yùn)行時(shí)的多態(tài)性是通過(guò)虛函數(shù)體現(xiàn)的。20、有如下程序:#includeusingnamespacestd;classPublication{//出版物類charname[30];public:Publication(char*name="未知名稱"){strcpy(this->name,name);}constchar*getNameoconst{returnname;}virtualconstchar*getType()const{return"未知類型";}};classBook:publicPublication{//書類public:Book(char*name):Publication(name){)virtualconstchar*getType()const{return"書";}};voidshowPublication(Publication&p){cout<A、未知類型:未知名稱B、未知類型:精彩人生C、書:未知名稱D、書:精彩人生標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:因?yàn)轭怋ook繼承自基類Publication,所以在類Book中的虛常成員函數(shù)*getTpye(){return”書”;}就會(huì)覆蓋基類中的虛常成員函數(shù)*getType()const{return"未知類型";},所以在主函數(shù)中調(diào)用函數(shù)showPublication(book)時(shí),getType()函數(shù)的輸出的結(jié)果是“書”,getName()函數(shù)的輸出結(jié)果為“精彩人生”。21、有如下程序:#includeusingnamespacestd;classInstrument{public:virtualvoidDisplay()=0:};classPiano:publicInstrument{public:voidDisplay(){/*函數(shù)體程序略*/}};intmain(){Instruments;Instrument*p=0;//…;return0;}下列敘述中正確的是()。A、語(yǔ)句“Insturment*p=0;”編譯時(shí)出錯(cuò)B、語(yǔ)句“Instruments;”編譯時(shí)出錯(cuò)C、類Piano中的Display函數(shù)不是虛函數(shù)D、類Instrument是一個(gè)虛基類標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:由于函數(shù)Display()是一個(gè)純虛函數(shù),所以類Instrument是抽象類,而抽象類是不能定義對(duì)象的,因而選項(xiàng)B為正確選項(xiàng)。22、有如下程序:#includeusingnamespacestd;classBase{public:virtualvoidShow(){cout<<’B’;}};classDerived:publicBase{public:voidShow(){cout<<’D’;}};intmain(){Base*p1=newDerived;Derived*p2=newDerived;p1->Show();p2->Show();deletep1:deletep2;return0;}運(yùn)行這個(gè)程序的輸出結(jié)果是()。A、BBB、BDC、DBD、DD標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:在基類Base中定義了虛函數(shù)Show()輸出字符‘B’,而在派生類Derived中對(duì)虛函數(shù)Show()進(jìn)行了重新定義,輸出字符‘D’。在主函數(shù)中對(duì)基類和派生類中的虛函數(shù)Show(1)進(jìn)行了多態(tài)調(diào)用,此時(shí)調(diào)用的是派生類中重新定義的Show(),輸出字符‘D’。國(guó)家二級(jí)C++機(jī)試(繼承和派生)模擬試卷第3套一、選擇題(本題共23題,每題1.0分,共23分。)1、有如下類聲明:classXA{intx:public:XA(intn){x=n;}};classXB:publicXA{inty;public:XB(inta,intb);};在構(gòu)造函數(shù)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){}標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是派生類中構(gòu)造函數(shù)的定義。派生類的構(gòu)造首先要調(diào)用基類的構(gòu)造函數(shù),對(duì)基類成員初始化;然后對(duì)派生類中的新增成員初始化。格式為:派生類名(構(gòu)造函數(shù)形參表)基類構(gòu)造函數(shù)(形參表)。2、有如下程序:#includeusingnamespacestd;classBASE{public:~BASE(){cout<<"BASE";}};classDERIVED:publicBASE{public:~DERIVED(){cout<<"DERIVED";}};immain(){DERIVEDx;return0;}執(zhí)行后的輸出結(jié)果是()。A、BASEB、DERIVEDC、BASEDERIVEDD、DERJVEDBASE標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:此題考查的是派生類的定義和使用。當(dāng)對(duì)象被刪除時(shí),派生類的析構(gòu)函數(shù)就被執(zhí)行。由于析構(gòu)函數(shù)不能被繼承,因此在執(zhí)行派生類的析構(gòu)函數(shù)時(shí),基類的析構(gòu)函數(shù)也將被調(diào)用。執(zhí)行順序是先執(zhí)行派生類的析構(gòu)函數(shù),冉執(zhí)行基類的析構(gòu)函數(shù),其順序與執(zhí)行構(gòu)造函數(shù)的順序正好相反。3、下列有關(guān)繼承和派生的敘述中,正確的是()。A、如果一個(gè)派生類私有繼承其基類,則該派生類對(duì)象不能訪問(wèn)基類的保護(hù)成員B、派生類的成員函數(shù)可以訪問(wèn)基類的所有成員C、基類對(duì)象可以賦值給派生類對(duì)象D、如果派生類沒(méi)有實(shí)現(xiàn)基類的一個(gè)純虛函數(shù),則該派生類是一個(gè)抽象類標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:此題考查的是繼承和派生。無(wú)論是哪種繼承方式,派生類都能夠訪問(wèn)基類的公有和保護(hù)成員,而不能訪問(wèn)基類的私有成員,故選項(xiàng)A和B錯(cuò)誤;公有繼承時(shí),基類的對(duì)象不可作為派生類的對(duì)象處理,即基類對(duì)象不可賦值給派生類對(duì)象,所以選項(xiàng)c錯(cuò)誤。4、在下列關(guān)鍵字中,不能用來(lái)表示繼承方式的是()。A、privateB、staticC、publicD、protected標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是繼承方式。繼承方式有私有(private)、保護(hù)(protected)、公有(public)三種。5、在類聲明中,緊跟在“public:”后聲明的成員的訪問(wèn)權(quán)限是()。A、私有B、公有C、保護(hù)D、默認(rèn)標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:類中提供了3種訪問(wèn)控制的權(quán)限:公有,私有和保護(hù)。其中公有類型定義了類的外部接口,任何一個(gè)外部的訪問(wèn)都必須通過(guò)外部接口進(jìn)行。私有類型的成員只允許本類的成員函數(shù)訪問(wèn),來(lái)自類外部的任何訪問(wèn)都是非法的,保護(hù)類型介于公有類型和私有類型之間,在繼承和派生時(shí)可以體現(xiàn)出其特點(diǎn)。6、定義派生類時(shí),若不使用關(guān)鍵字顯式地規(guī)定采用何種繼承方式,則默認(rèn)方式()。A、私有繼承B、非私有繼承C、保護(hù)繼承D、公有繼承標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:繼承的方式包括三種:公有繼承,保護(hù)繼承和私有繼承。如果不顯示的給出繼承方式,缺省的類繼承方式是私有繼承private。7、有如下類定義:classXX{intxx;public:XX():xx(0){cout<<’A’;}XX(intn):xx(n){cout<<’B’;}};classYY:publicXX{intyy;public:YY():yy(0){cout<A、YYy1(0,0);B、YYy2(1);C、YYy3(0);D、YYy4;標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:考查的是類的繼承。選項(xiàng)A的執(zhí)行結(jié)果為B0,建立YY的對(duì)象y1,首先調(diào)用其構(gòu)造函數(shù),YY繼承于XX所以先調(diào)用的為xx的構(gòu)造函數(shù),根據(jù)輸入的參數(shù)可知輸出B,然后執(zhí)行YY的構(gòu)造函數(shù)輸出0;同理,選項(xiàng)B的執(zhí)行結(jié)果為B1,選項(xiàng)C的執(zhí)行結(jié)果為B0。8、下列關(guān)于繼承方式的描述中,錯(cuò)誤的是()。A、如果不顯式地指定繼承方式,缺省的繼承方式是私有(private)B、采用公有繼承方式時(shí),基類中的公有成員在派生類中仍然是公有成員C、采用保護(hù)繼承方式時(shí),基類中的保護(hù)成員在派生類中仍然是保護(hù)成員D、采用私有繼承方式時(shí),基類中的私有成員在派生類中仍然是私有成員標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:基類中的私有成員在派生類中是隱蔽的,只能在基類內(nèi)部訪問(wèn)。派生類中的成員不可以訪問(wèn)基類中的私有成員,只可以訪問(wèn)基類中的公有成員和保護(hù)成員。9、下列代碼段聲明了3個(gè)類classPerson{};classStudent:publicPerson{};classUndergraduate:Student{};下列關(guān)于這些類之間關(guān)系的描述中,錯(cuò)誤的是()。A、類Person是類Undergraduate的基類B、類Undergraduate從類student公有繼承C、類student是類Person的派生類D、類Undergraduate是類Person的派生類標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:Student類公有繼承自Person類,Undergraduate類私有繼承自Srudent類。所以Undergraduate類是從Student類私有繼承的。10、下列關(guān)于基類和派生類關(guān)系的敘述中,正確的是()。A、每個(gè)類最多只能有一個(gè)直接基類B、派生類中的成員可以訪問(wèn)基類中的任何成員C、基類的構(gòu)造函數(shù)必須在派生類的構(gòu)造函數(shù)體中調(diào)用D、派生類除了繼承基類的成員,還可以定義新的成員標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:繼承分為單繼承和多繼承,一個(gè)類只有一個(gè)直接基類時(shí),稱為單繼承;而一個(gè)類同時(shí)有多個(gè)直接基類時(shí),則稱為多繼承。派生類的數(shù)據(jù)成員由所有基類的數(shù)據(jù)成員與派生類新增的數(shù)據(jù)成員共同組成。11、若已定義了類Vehicle,則下列派生類定義中,錯(cuò)誤的是()。A、classCar:vehicle{/*類體略*/};B、classCar:publiccar{/*類體略*/};C、classCar:publicVehicle{/*類體略*/}D、classCar:virtualPublicVehicle{/*類體略*/};標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:類Car不能派生自它本身。12、下列描述中,錯(cuò)誤的是()。A、公有繼承時(shí)基類中的公有成員在派生類中仍是公有成員B、公有繼承時(shí)基類中的保護(hù)成員在派生類中仍是保護(hù)成員C、保護(hù)繼承時(shí)基類中的公有成員在派生類中仍是公有成員D、保護(hù)繼承時(shí)基類中的保護(hù)成員在派生類中仍是保護(hù)成員標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:保護(hù)繼承時(shí)基類中的公有成員在派生類中是保護(hù)成員。13、當(dāng)派生類繼承一個(gè)基類時(shí),默認(rèn)的繼承方式為()。A、PublicB、protectedC、privateD、不確定標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:派生類繼承一個(gè)基類時(shí),默認(rèn)的繼承方式為private。14、下列關(guān)于派生類的敘述中,錯(cuò)誤的是()。A、派生類至少要有一個(gè)基類B、派生類中包括了從基類繼承的成員C、一個(gè)派生類可以作為另一個(gè)派生類的基類D、基類成員被派生類繼承以后訪問(wèn)權(quán)限保持不變標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:派生類對(duì)象對(duì)基類成員的訪問(wèn)權(quán)限:①對(duì)于公有繼承,只有基類的公有成員可以被派生類對(duì)象訪問(wèn),其他(保護(hù)和私有)成員不能被訪問(wèn)。②對(duì)于私有繼承和保護(hù)繼承,基類中所有成員都不能被派乍類對(duì)象訪問(wèn)。派生類對(duì)基類成員的訪問(wèn)權(quán)限:①對(duì)于公有繼承,基類中公有成員和保護(hù)成員可以訪問(wèn),而基類中私有成員不能被訪問(wèn)。②對(duì)于私有繼承和保護(hù)繼承,也是基類中的公有成員和保護(hù)成員可以被派生類訪問(wèn),而基類中的私有成員不能被訪問(wèn)。15、有如下類聲明: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中保護(hù)的數(shù)據(jù)成員和成員函數(shù)的個(gè)數(shù)是()。A、4B、3C、2D、1標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是派生與繼承中的訪問(wèn)權(quán)限。protected派生:private->不可見(jiàn);protected->private;public->protected。16、有如下程序:#includeusingnamespacestd;classBase{public:voidfun(){cout<<"Base::fun"<A、Base.fun();B、Base::fun();C、Base->fun();D、fun();標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是繼承的使用。分析題目可知,橫線處應(yīng)填入對(duì)基類成員函數(shù)fun()的調(diào)用語(yǔ)句,此處只能使用作用域運(yùn)算符“::”才能調(diào)用到基類的同名函數(shù),故選項(xiàng)B正確。17、有如下程序:#includeusingnamespacestd;classBase{private:voidfun1()const{cout<<"fun1";}protected:voidfun2()const{cout<<"fun2";}public:voidfun3()const{cout<<"fun3";}};classDerived:protectedBase{public:voidfun4()const{cout<<"fun4";}};intmain(){Derivedobj;obj.fun1();//①obj.fun2();//②obj.fun3();//③obj.fun4();//④return0:}其中有語(yǔ)法錯(cuò)誤的語(yǔ)句是()。A、①②③④B、①②③C、②⑧④D、①④標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是保護(hù)繼承。因?yàn)镈erived以pmtected方式繼承了Base類,所以父類Base中的公育成員和保護(hù)成員均成了Derived類的保護(hù)成員,而B(niǎo)ase類的私有成員Derived類不可訪問(wèn)。所以,主函數(shù)中通過(guò)Derived類的對(duì)象只能夠訪問(wèn)到Derived類的公有成員。18、有如下類定義:classMyBase{intk;public:MyBase(intn=O):k(n){)intvalue()const{returnk;});classMyDerived:MyBase{intj;.public:MyDerived(inti):j(i){}intgetK()const{returnk;)intgetJ()const{returnj;}};編譯時(shí)發(fā)現(xiàn)有一處語(yǔ)法錯(cuò)誤,對(duì)這個(gè)錯(cuò)誤最準(zhǔn)確的描述是()。A、函數(shù)getK試圖訪問(wèn)基類的私有成員變量kB、在類MyDerived的定義中,基類名MyBase前缺少關(guān)鍵字public、protected或privateC、類MyDerived缺少一個(gè)無(wú)參的構(gòu)造函數(shù)D、類MyDerived的構(gòu)造函數(shù)沒(méi)有對(duì)基類數(shù)據(jù)成員k進(jìn)行初始化標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:此題考查的是派生類對(duì)基類成員的訪問(wèn)。因?yàn)轭愔腥笔〉脑L問(wèn)權(quán)限是私有,所以本題中MyBase類中定義的成員k是私有成員。派生類中的成員只能訪問(wèn)基類中的公有成員和保護(hù)成員,不能訪問(wèn)基類中的私有成員。所以派生類中函數(shù)getK()中的語(yǔ)句returnk;是非法的。19、派生類的成員函數(shù)不能訪問(wèn)基類的()。A、公有成員和保護(hù)成員B、公有成員C、私有成員D、保護(hù)成員標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是派生類對(duì)基類成員的訪問(wèn)。派生類對(duì)基類的各個(gè)成員的訪問(wèn)能力與繼承方式無(wú)關(guān),其成員不能訪問(wèn)基類中的私有成員,可以訪問(wèn)基類的公有成員和保護(hù)成員。20、若有如下類定義:classB{voidfun1(){}protected:doublevar1;public:voidfun2(){)};classD:publicB{protected:voidfun3(){}};已知obj是類D的對(duì)象,下列句中不違反類成員訪問(wèn)控制權(quán)限的是()。A、obj.fun1();B、obj.var1;C、obj.fun2();D、obj.fun3();標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是基類成員在派生類中的訪問(wèn)屬性。派生類中的成員不能訪問(wèn)基類中的私有成員,可以訪問(wèn)基類中的公有成員和保護(hù)成員。派生類從基類公有繼承時(shí),基類的公有成員和保護(hù)成員在派生類中仍然是公有成員和保護(hù)成員;派生類從基類私有繼承時(shí),基類的公有成員和保護(hù)成員在派生類中都變成私有成員;派生類從基類保護(hù)繼承時(shí),基類的公有成員在派生類中變成保護(hù)成員,鏨類的保護(hù)成員在派生類中仍然是保護(hù)成員。根據(jù)以上分析可知,本題中只有從B類繼承的fun2()為公有屬性,故選C選項(xiàng)。21、有如下類聲明:classBase{protected;intamount;public;Base(intn=0):amount(n){)intgetAmountoconst{returnamount;}};classDerived:publicBase{protected;intvalue;public;Derived(intm,intn):value(m).Base(n){)IntgetData()const{returnvalue+amount;}};已知X是一個(gè)Derived對(duì)象,則下列表達(dá)式中正確的是()。A、x.value+x.getAmount()B、x.getData0一X.gctAmount()C、X.getData0一x.a(chǎn)mountD、x.value+x.a(chǎn)mount標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是派生類對(duì)基類成員的訪問(wèn)權(quán)限。派生類中的成員不能訪問(wèn)基類中的私有成員,可以訪問(wèn)基類中的公有成員和保護(hù)成員。派生類從基類公有繼承時(shí),基類的公有成員和保護(hù)成員在派生類中仍然是公有成員和保護(hù)成員;派生類從基類私有繼承時(shí),基類的公有成員和保護(hù)成員在派生類中都變成私有成員;派生類從基類保護(hù)繼承時(shí),基類的公有成員在派生類中變成保護(hù)成員,基類的保護(hù)成員在派生類中仍然是保護(hù)成員。22、在一個(gè)派生類的成員函數(shù)中,試圖調(diào)用其基類的成員函數(shù)“voidf();”,但無(wú)法通過(guò)編譯。這說(shuō)明()。A、f()是基類的私有成員B、f()是基類的保護(hù)成員C、派生類的繼承方式為私有D、派生類的繼承方式為保護(hù)標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:在派生類對(duì)基類的三種繼承形式中,都無(wú)法對(duì)基類的私有成員訪問(wèn)A正確。在B中,三種繼承方式都能訪問(wèn)基類的保護(hù)成員,故B不正確。C選項(xiàng)的情況在f()是基類私有成員情況下是對(duì)的,但是還有別的可能,并不一定正確。同樣D也不一定正確。23、建立一個(gè)有成員對(duì)象的派生類對(duì)象時(shí),各構(gòu)造函數(shù)體的執(zhí)行次序?yàn)?)。A、派生類、成員對(duì)象類、基類B、成員對(duì)象類、基類、派生類C、基類、成員對(duì)象類、派生類D、基類、派生類、成員對(duì)象類標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:建立派生類對(duì)象的時(shí)候,構(gòu)造函數(shù)的執(zhí)行順序如下:執(zhí)行基類的構(gòu)造函數(shù),調(diào)用的順序按照基類被繼承時(shí)候的順序(自左向右)。然后是執(zhí)行成員對(duì)象的構(gòu)造函數(shù),調(diào)用順序按照各個(gè)成員對(duì)象在類中的聲明順序(自上而下),最后是執(zhí)行派生類的構(gòu)造函數(shù)。國(guó)家二級(jí)C++機(jī)試(繼承和派生)模擬試卷第4套一、選擇題(本題共18題,每題1.0分,共18分。)1、下列有關(guān)類繼承的敘述中,錯(cuò)誤的是()。A、繼承可以實(shí)現(xiàn)軟件復(fù)用B、虛基類可以解決由多繼承產(chǎn)生的二義性問(wèn)題C、派生類構(gòu)造函數(shù)要負(fù)責(zé)調(diào)用基類的構(gòu)造函數(shù)D、派生類沒(méi)有繼承基類的私有成員標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:此題考查的是類繼承。派生類繼承了基類的(全部數(shù)據(jù)成員,私有成員),只是基類的私有成員在派生類中是隱藏的,只能在基類內(nèi)部訪問(wèn),故選項(xiàng)D錯(cuò)誤。2、定義派生類時(shí),若不使用關(guān)鍵字顯式地規(guī)定采用何種繼承方式,則默認(rèn)方式為()。A、私有繼承B、非私有繼承C、保護(hù)繼承D、公有繼承標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:繼承的方式包括三種:公有繼承,保護(hù)繼承和私有繼承。如果不顯示的給出繼承方式,缺省的類繼承方式是私有繼承private。3、下列關(guān)于繼承方式的描述中,錯(cuò)誤的是()。A、如果不顯式地指定繼承方式,缺省的繼承方式是私有(private)B、采用公有繼承方式時(shí),基類中的公有成員在派生類中仍然是公有成員C、采用保護(hù)繼承方式時(shí),基類中的保護(hù)成員在派生類中仍然是保護(hù)成員D、采用私有繼承方式時(shí),基類中的私有成員在派生類中仍然是私有成員標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:基類中的私有成員在派生類中是隱蔽的,只能在基類內(nèi)部訪問(wèn)。派生類中的成員不可以訪問(wèn)基類中的私有成員,只可以訪問(wèn)基類中的公有成員和保護(hù)成員。4、若已定義了類Vehicle,則下列派生類定義中;錯(cuò)誤的是()。A、classCar:vehicle{/*類體略*/};B、classCar:publiccar{/*類體略*/};C、classCar:publicVehicle{/*類體略*/};D、classCar:virtualpublicVehicle{/*類體略*/};標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:類Car不能派生自它本身。5、下列關(guān)于派生類的敘述中,錯(cuò)誤的是()。A、派生類至少要有一個(gè)基類B、派生類中包括了從基類繼承的成員C、一個(gè)派生類可以作為另一個(gè)派生類的基類D、基類成員被派生類繼承以后訪問(wèn)權(quán)限保持不變標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:派生類對(duì)象對(duì)基類成員的訪問(wèn)權(quán)限:①對(duì)于公有繼承,只有基類的公有成員可以被派生類對(duì)象訪問(wèn),其他(保護(hù)和私有)成員不能被訪問(wèn)。②對(duì)于私有繼承和保護(hù)繼承,基類中所有成員都不能被派生類對(duì)象訪問(wèn)。派生類對(duì)基類成員的訪問(wèn)權(quán)限:①對(duì)于公有繼承,基類中公有成員和保護(hù)成員可以訪問(wèn),而基類中私有成員不能被訪問(wèn)。②對(duì)于私有繼承和保護(hù)繼承,也是基類中的公有成員和保護(hù)成員可以被派生類訪問(wèn),而基類中的私有成員不能被訪問(wèn)。6、有如下程序:#include<iostream>usingnamespacestd;classBase{private:voidfun1()const{cout<<"fun1";}protected:voidfun2()const{cout<<"fun2";}public:voidfun3()const{cout<<"fun3";}};classDerived:protectedBase{public:voidfun4()corot{cout<<"fun4";}};intmain(){Derivedobj;obj.fun4();//①obj.fun2();//②obj.fun3();//③obj.fun4();//④return0;}其中有語(yǔ)法錯(cuò)誤的語(yǔ)句是()。A、①②③④B、①②③C、②③④D、①④標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是保護(hù)繼承。因?yàn)镈erived以protected方式繼承了Base類,所以父類Base中的公有成員和保護(hù)成員均成了Derived類的保護(hù)成員,而B(niǎo)ase類的私有成員Derived類不可訪問(wèn)。所以,主函數(shù)中通過(guò)Derived類的對(duì)象只能夠。訪問(wèn)到Derived類的公有成員。7、派生類的成員函數(shù)不能訪問(wèn)基類的()。A、公有成員和保護(hù)成員B、公有成員C、私有成員D、保護(hù)成員標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是派生類對(duì)基類成員的訪問(wèn)。派生類對(duì)基類的各個(gè)成員的訪問(wèn)能力與繼承方式無(wú)關(guān),其成員不能訪問(wèn)基類中的私有成員,可以訪問(wèn)基類的公有成員和保護(hù)成員。8、在一個(gè)派生類的成員函數(shù)中,試圖調(diào)用其基類的成員函數(shù)“voidf();”,但無(wú)法通過(guò)編譯。這說(shuō)明()。A、f()是基類的私有成員B、f()是基類的保護(hù)成員C、派生類的繼承方式為私有D、派生類的繼承方式為保護(hù)標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:在派生類對(duì)基類的三種繼承形式中,都無(wú)法對(duì)基類的私有成員訪問(wèn)A正確。在B中,三種繼承方式都能訪問(wèn)基類的保護(hù)成員,故B不正確。C選項(xiàng)的情況在f()是基類私有成員情況下是對(duì)的,但是還有別的可能,并不一定正確。同樣D也不一定正確。9、有如下類定義和變量定義:classParems{public:intpublicData;private:intprivateData;};classChildA:publicParents{/*類體略*/};classChildB:privateParents{/*類體略*/};ChildAa;ChildBb;下列語(yǔ)句中正確的是()。A、cout<<a.publicData<<endl;B、cout<<a.privateData<<endl;C、cout<<b.publicData<<endl;D、cout<<b.privateData<<endl;標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:基類Parents的私有成員privateData在派生類ChildA和ChildB中是不可以訪問(wèn),所以選項(xiàng)B、D是錯(cuò)誤,而派生類ChildB私有繼承基類Parents,所以基類Parents的公有成員publicData在派生類ChildB中變?yōu)樗接谐蓡T,只能在派生類ChildB內(nèi)部訪問(wèn),因而選項(xiàng)C是錯(cuò)誤的。派生類ChildA公有繼承基類Parents,所以基類Parents的公有成員publicData在派生類ChildA中可以訪問(wèn)。10、有如下兩個(gè)類定義classxx{private:dOublex1;protected:doublex2;public:doublex3;};classYY:protectedXX{private:doubley1;potected:doubley2;public:doubley3;};在類YY中保護(hù)成員變量的個(gè)數(shù)是()。A、1B、2C、3D、4標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:在C++中派生類從基類保護(hù)繼承時(shí),基類的公有成員在派生類中改變?yōu)楸Wo(hù)成員,基類的保護(hù)成員在派生類中仍為保護(hù)成員。所以對(duì)于本題來(lái)說(shuō),YY類保護(hù)繼承自類XX,那么類XX中的公有成員x3和保護(hù)成員x2在派生類中都成為保護(hù)成員,再加上類YY。中的保護(hù)成員y2,因此在派生類YY中保護(hù)成員的個(gè)數(shù)為3。11、下列關(guān)于派生類和基類的描述中,正確的是()。A、派生類成員函數(shù)只能訪問(wèn)基類的公有成員B、派生類成員函數(shù)只能訪問(wèn)基類的公有和保護(hù)成員C、派生類成員函數(shù)可以訪問(wèn)基類的所有成員D、派生類對(duì)基類的默認(rèn)繼承方式是公有繼承標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:派生類不論是采用那種繼承方式繼承基類,它的成員函數(shù)只能訪問(wèn)基類的公有成員和保護(hù)成員。12、有如下程序:#include<iostream>usingnamespacestd;classXX{intx;public
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)Mini LED行業(yè)開(kāi)拓第二增長(zhǎng)曲線戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)搬家行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)風(fēng)電設(shè)備行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025年網(wǎng)絡(luò)工程師工作計(jì)劃(共5篇)
- 廣東省2024屆高三下學(xué)期三模英語(yǔ)試題
- 高端智能專用車制造項(xiàng)目環(huán)境影響報(bào)告書批前
- 年產(chǎn)100萬(wàn)立方建筑用砂巖新建項(xiàng)目資金申請(qǐng)報(bào)告
- 二年級(jí)數(shù)學(xué)計(jì)算題專項(xiàng)練習(xí)1000題匯編集錦
- 2023屆江蘇省蘇州市高三二??记澳M地理卷(一)附答案
- 手工制瓷技藝2
- 口腔修復(fù)學(xué)(全套課件290p)課件
- 小學(xué)生心理問(wèn)題的表現(xiàn)及應(yīng)對(duì)措施【全國(guó)一等獎(jiǎng)】
- 小學(xué)生科普人工智能
- 初中學(xué)段勞動(dòng)任務(wù)清單(七到九年級(jí))
- 退耕還林監(jiān)理規(guī)劃
- GB/T 1335.2-2008服裝號(hào)型女子
- GB 31247-2014電纜及光纜燃燒性能分級(jí)
- DCC20網(wǎng)絡(luò)型監(jiān)視與報(bào)警
- 項(xiàng)目實(shí)施路徑課件
- 《簡(jiǎn)單教數(shù)學(xué)》讀書心得課件
- 《室速的診斷及治療》課件
評(píng)論
0/150
提交評(píng)論