國家二級(jí)C++機(jī)試(類和對(duì)象)模擬試卷1(共212題)_第1頁
國家二級(jí)C++機(jī)試(類和對(duì)象)模擬試卷1(共212題)_第2頁
國家二級(jí)C++機(jī)試(類和對(duì)象)模擬試卷1(共212題)_第3頁
國家二級(jí)C++機(jī)試(類和對(duì)象)模擬試卷1(共212題)_第4頁
國家二級(jí)C++機(jī)試(類和對(duì)象)模擬試卷1(共212題)_第5頁
已閱讀5頁,還剩61頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

國家二級(jí)C++機(jī)試(類和對(duì)象)模擬試卷1(共9套)(共212題)國家二級(jí)C++機(jī)試(類和對(duì)象)模擬試卷第1套一、選擇題(本題共26題,每題1.0分,共26分。)1、有如下類定義:classFoo{public:Foo(intv):value(v){}//①Foo(){}∥②private:F00(){}∥③intvalue=0;//④};其中存在語法錯(cuò)誤的行是()。A、①B、②C、③D、④標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:此題考查的是類的定義。C++語言規(guī)定,在類體內(nèi)不允許對(duì)所定義的數(shù)據(jù)成員進(jìn)行初始化。2、以下關(guān)鍵字不能用來聲明類的訪問權(quán)限的是()。A、publicB、staticC、protectedD、private標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是類的訪問權(quán)限。在C++語言中,類的訪問權(quán)限有公有、保護(hù)和私有三種。故本題選B。3、下列有關(guān)類成員的敘述中,正確的是()。A、友元函數(shù)是類的成員函數(shù)B、類成員的默認(rèn)訪問權(quán)限是私有的C、類成員函數(shù)必須聲明為公有的D、類的靜態(tài)數(shù)據(jù)成員不能是常成員標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是類成員的有關(guān)概念。類的友元函數(shù)可以直接訪問該類的所有成員,但它不是類的成員函數(shù),故選項(xiàng)A.錯(cuò)誤;類成員函數(shù)的訪問權(quán)限可以聲明為公有、保護(hù)、私有,故選項(xiàng)C錯(cuò)誤:靜態(tài)數(shù)據(jù)成員的聲明是使用關(guān)鍵字static,它可以是常成員,故選項(xiàng)D錯(cuò)誤。4、有如下兩個(gè)類定義:classAA{};classBB{AAv1,*v2;BBv3;int*v4;}其中有一個(gè)成員變量的定義是錯(cuò)誤的,這個(gè)變量是()。A、v1B、v2C、v3D、v4標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:在定義類的數(shù)據(jù)成員時(shí),類中的數(shù)據(jù)成員可以是任意類型,包括整型、浮點(diǎn)型、字符符型、數(shù)組、指針和引用等,也可以是對(duì)象。但是要注意,只有另外一個(gè)類的對(duì)象,才可以作為該類的成員,即作為類的成員對(duì)象存在。自身類的對(duì)象是不可以作為自身類的成員存在,但自身類的指針可以。對(duì)于本題,在定義類BB時(shí),不能包括其對(duì)象v3。5、有如下類定義:classMyClass{intb;chara;doublec;public:MyClass():c(0.0),b(0),a(’,’){}};創(chuàng)建這個(gè)類的對(duì)象時(shí),數(shù)據(jù)成員的初始化順序是()。A、a,b,CB、c,b,aC、b,a,CD、c,a,b標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:類的成員初始化順序與成員變量在構(gòu)造函數(shù)中的位置先后順序無關(guān),只與成員變量在類中定義的先后順序有關(guān)。6、下列關(guān)于對(duì)象初始化的敘述中,正確的是()。A、定義對(duì)象的時(shí)候不能對(duì)對(duì)象進(jìn)行初始化B、定義對(duì)象之后可以顯式地調(diào)用構(gòu)造函數(shù)進(jìn)行初始化C、定義對(duì)象時(shí)將自動(dòng)調(diào)用構(gòu)造函數(shù)進(jìn)行初始化D、在一個(gè)類中必須顯式地定義構(gòu)造函數(shù)實(shí)現(xiàn)初始化標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:建立對(duì)象時(shí)根據(jù)給定的參數(shù)調(diào)用相應(yīng)的構(gòu)造函數(shù)對(duì)對(duì)象進(jìn)行初始化。無參數(shù)時(shí)表示調(diào)用缺省構(gòu)造函數(shù)。構(gòu)造函數(shù)在對(duì)象被創(chuàng)建時(shí)由系統(tǒng)自動(dòng)調(diào)用。7、有如下程序:#include<iostream>usingnamespacestd;classPoint{public:staticintnumber;public:Pointo{number++;}~Point(){number--;}};intPoint::number--0:voidmainO{Point*ptr;PointA,B:{Point*ptr_point=newPoint[3];ptx=ptr_point;}PointC;Gout+Point:number+endl;delete[]ptr;}運(yùn)行時(shí)輸出的結(jié)果是()。A、3B、4C、6D、7標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題是靜態(tài)成員、對(duì)象的構(gòu)造和對(duì)象的生存期等知識(shí)點(diǎn)的綜合考查。此題定義了一個(gè)靜態(tài)成員變量number,初始值為0。主函數(shù)中第2行定義了2個(gè)Point對(duì)象,此時(shí)number變?yōu)?;隨后new運(yùn)算符又定義了一個(gè)包含3個(gè)Point對(duì)象元素的數(shù)組,其通過delete結(jié)束后number的值變?yōu)?;然后又定義了一個(gè)Point對(duì)象C,number變?yōu)?;最后輸出number的內(nèi)容。8、下列情況中,不會(huì)調(diào)用拷貝構(gòu)造函數(shù)的是()。A、用一個(gè)對(duì)象去初始化同一類的另一個(gè)新對(duì)象時(shí)B、將類的一個(gè)對(duì)象賦值給該類的另一個(gè)對(duì)象時(shí)C、函數(shù)的形參是類的對(duì)象,調(diào)用函數(shù)進(jìn)行形參和實(shí)參結(jié)合時(shí)D、函數(shù)的返回值是類的對(duì)象,函數(shù)執(zhí)行返回調(diào)用時(shí)標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是復(fù)制構(gòu)造函數(shù)的概念。用一個(gè)已知的對(duì)象初始化一個(gè)正在創(chuàng)建的同類對(duì)象時(shí),就會(huì)發(fā)生復(fù)制構(gòu)造函數(shù)。因此,選項(xiàng)A、C、D均會(huì)調(diào)用復(fù)制構(gòu)造函數(shù),而只有選項(xiàng)B沒有創(chuàng)建的動(dòng)作,不調(diào)用復(fù)制構(gòu)造函數(shù)。9、對(duì)于一個(gè)類定義,下列敘述中錯(cuò)誤的是()。A、如果沒有定義拷貝構(gòu)造函數(shù),編譯器將生成一個(gè)拷貝構(gòu)造函數(shù)B、如果沒有定義缺省的構(gòu)造函數(shù),編譯器將一定生成一個(gè)缺省的構(gòu)造函數(shù)C、如果沒有定義構(gòu)造函數(shù),編譯器將生成一個(gè)缺省的構(gòu)造函數(shù)和一個(gè)拷貝構(gòu)造函數(shù)D、如果已經(jīng)定義了構(gòu)造函數(shù)和拷貝構(gòu)造函數(shù),編譯器不會(huì)生成任何構(gòu)造函數(shù)標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是構(gòu)造函數(shù)。如果一個(gè)類中沒有定義任何構(gòu)造函數(shù),編譯器將生成一個(gè)不帶參數(shù)的公有缺省構(gòu)造函數(shù)。但只要定義了一個(gè)任意的構(gòu)造函數(shù),就不會(huì)生成缺省構(gòu)造函數(shù)了。10、有如下類定義:classMyClass{Intvalue;public;MyClass(intn):value(n){}intgerValue()const{returnvalue;}};則類MyClass的構(gòu)造函數(shù)的個(gè)數(shù)是()。A、1個(gè)B、2個(gè)C、3個(gè)D、4個(gè)標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:此題考查的是構(gòu)造函數(shù)的概念。構(gòu)造函數(shù)的名字必須與類名相同;構(gòu)造函數(shù)不指定返回值類型;構(gòu)造函數(shù)可以重載;在創(chuàng)建對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù)。11、有如下程序:#include<iOstream>usingnamespacestd;classMyClass{public:MyClass(inti=0){cout<<1;}MyClass(constMyClass&x){cout<<2;}MyClass&operator=(constMyClass&x){cout<<3;return*this;}~MyClass(){cout<<4;}};intmain(){MyClassobj1(1),obj2(2),obj3(obj1);return0:}運(yùn)行時(shí)的輸出結(jié)果是()。A、112444B、11114444C、121444D、11314444標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:當(dāng)創(chuàng)建MyClass類對(duì)象obj1(1)和obj2(2)時(shí)候,調(diào)用類構(gòu)造函數(shù)會(huì)輸出兩個(gè)1,然后創(chuàng)建類對(duì)象obj3(obj(1))時(shí),會(huì)調(diào)用拷貝類構(gòu)造函數(shù),輸出一個(gè)2。然后當(dāng)main函數(shù)結(jié)束時(shí)候,調(diào)用三個(gè)對(duì)象的析構(gòu)函數(shù)會(huì)輸出三個(gè)4。12、Sample是一個(gè)類,執(zhí)行下面語句后,調(diào)用Sample類的構(gòu)造函數(shù)的次數(shù)是()。Samplea[2],*P=newSample;A、0B、1C、2D、3標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:在C++中,聲明一個(gè)類對(duì)象時(shí),編譯程序需要調(diào)用類的構(gòu)造函數(shù)為對(duì)象分配存儲(chǔ)空間,進(jìn)行必須的初始化。在本題的這條語句中,聲明了一個(gè)Sample類型的包含2個(gè)數(shù)組元素的數(shù)組a[2],一個(gè)指向類Sample對(duì)象的指針P,所以Sample類的構(gòu)造函數(shù)共調(diào)用了3次。13、有如下程序#include<iostream>usingnamespacestd;classTest{public:Test(){}Test(constTest&t){cout<<1;}};Testfun(Test&u){Testt=u;returnt;}intmain(){Testx,y;x=fun(y);return0;}運(yùn)行這個(gè)程序的輸出結(jié)果是()。A、無輸出B、1C、11D、111標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:在類Test中定義拷貝構(gòu)造函數(shù)Test(constTest&t),其函數(shù)體為輸出1,在主函數(shù)main中,當(dāng)執(zhí)行語句x=fun(y),調(diào)用拷貝函數(shù)用對(duì)象y的值構(gòu)造對(duì)象u,輸出1,在執(zhí)行函數(shù)fun()的return語句時(shí),調(diào)用拷貝函數(shù)構(gòu)造匿名對(duì)象,輸出1。14、有如下程序:#include<iostream>usingnamespacestd;classXA{inta;public:staticintb;XA(intaa):a(aa){b++;}~XA(){}intget(){returna;}};intXA::b=0;intmain()XAd1(2),d2(3);cout<<d1.get()+d2.get()+XA::b<<endl;return0;}運(yùn)行時(shí)的輸出結(jié)果是()。A、5B、6C、7D、8標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:執(zhí)行XA類的實(shí)例變量d1(2)時(shí),成員函數(shù)d1.get()的返回值等于2,XA.b的值等于1,執(zhí)行XA類的實(shí)例變量d2(3)時(shí),成員函數(shù)d1.get()的返回值等于3,XA.b的值等于2,所以輸出結(jié)果為2+3+2=7。15、若PAT是一個(gè)類,則程序運(yùn)行時(shí),語句“PAT{*ad}[3];”調(diào)用PAT的構(gòu)造函數(shù)的次數(shù)是()。A、0B、1C、2D、3標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:語句“PAT(*ad)[3]”定義了含有3個(gè)元素的指向類PAT類型的指針數(shù)組ad。16、下列關(guān)于類成員對(duì)象構(gòu)造函數(shù)調(diào)用順序的敘述中,正確的是()。A、與它們?cè)诔跏蓟斜碇械捻樞蛳嗤珺、與它們?cè)陬愔新暶鞯捻樞蛳嗤珻、與析構(gòu)函數(shù)的調(diào)用順序相同D、順序不確定標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:類成員對(duì)象構(gòu)造函數(shù)的調(diào)用是按照在類中定義的順序進(jìn)行的,而不是按照構(gòu)造函數(shù)說明后的冒號(hào)順序進(jìn)行構(gòu)造的。17、有如下頭文件:intf1();staticintf2();classMA{public:intf3();staticintf4();};在所描述的函數(shù)中,具有隱含的this指針的是()。A、f1B、f2C、f3D、f4標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是this指針。this指針是一個(gè)隱含的指針,它隱含于每個(gè)類的非靜態(tài)成員函數(shù)中,它明確地表示出了成員函數(shù)當(dāng)前操作的數(shù)據(jù)所屬的對(duì)象。題目電,只有f3()滿足“類的非靜態(tài)成員函數(shù)”的要求,故應(yīng)選C選項(xiàng)。18、有如下程序:#include<iostream>usingnamespacestd;classTest{public:Test(){n+=2;}~Test0{n-=3;},staticintgetNum(){returnn;}private:staticintn;};intTest::n=1;intmain(){Test*p=newTest;deletep;cout<<"n="<<Test::getNum()<<endl;return0;}執(zhí)行后的輸出結(jié)果是()。A、n=0B、n=1C、n=2D、n=3標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:此題考查的是靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)。靜態(tài)數(shù)據(jù)成員是類中所有對(duì)象共享的成員,而不是某個(gè)對(duì)象的成員。題目中的靜態(tài)數(shù)據(jù)成員n的運(yùn)算具有疊加性,執(zhí)行“n+=2”和“n-=3”后n的值為0。19、有如下類定義:classPoint{private;staticinthow_many;};_________how_many=0;要初始化Point類的靜態(tài)成員how_many,下劃線處應(yīng)填入的內(nèi)容是()。A、ingB、staticintC、intPoint::D、staticintPoint::標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是靜態(tài)數(shù)據(jù)成員的初始化。靜態(tài)數(shù)據(jù)成員應(yīng)在類體外進(jìn)行初始化,且初始化的一般格式為:數(shù)據(jù)類型類名::靜態(tài)數(shù)據(jù)成員名=初始值。20、有如下類定義:classSample{public;Sample(intx):ref(x){}//①private:Sample():ref(0){}//②staticintval=5;//③constintref;//④};上述程序段中,錯(cuò)誤的語句是()。A、①B、②C、③D、④標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:靜態(tài)整型數(shù)據(jù)不能定義為類的數(shù)據(jù)成員。21、由于常對(duì)象不能被更新,因此()。A、通過常對(duì)象只能調(diào)用它的常成員函數(shù)B、通過常對(duì)象只能調(diào)用靜態(tài)成員函數(shù)C、常對(duì)象的成員都是常成員D、通過常對(duì)象可以調(diào)用任何不改變對(duì)象值的成員函數(shù)標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:此題考查的是常對(duì)象與常成員函數(shù)的概念。使用const關(guān)鍵字修飾的對(duì)象稱為常對(duì)象,它不能被更新,所以常對(duì)象只能調(diào)用常成員函數(shù)而不能調(diào)用其它成員函數(shù):使用const關(guān)鍵字聲明的成員函數(shù)是常成員函數(shù),它也不能被更新,常成員函數(shù)只能調(diào)用常成員函數(shù)而不能調(diào)用其它函數(shù)。22、有如下程序:#include<iostream>usingnamespacestd;classMyClass{public:MyClass(intx):val(x){}voidSet(intx){Val=x;}voidPrint()const{cout<<"val="<<Val<<’\t’;}private:intval;};intmain(){constMyClassobj1(10);MyClassobj2(20);obj1.Print();//語句1obj2.Print();//語句2obj1.Set(20);//語句3obj2.Set(30);//語句4return0;}其主函數(shù)中錯(cuò)誤的語句是()。A、語句1B、語句2C、語句3D、語句4標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:在創(chuàng)建類對(duì)象obj1(10)時(shí),前面有關(guān)鍵字const,所以當(dāng)語句3調(diào)用obi1的成員函數(shù)試圖修改其私有成員的數(shù)值的時(shí)候,會(huì)編譯出錯(cuò)。23、有如下程序:#include<iostream>usingnamespacestd;classA{public:A(inti=0):r1(i){}voidprint(){cout<<’E’<<r1<<’-’;}voidprint()const{cout<<’C’<<r1*r1<<’-’;}voidprint(intx){cout<<’p’<<r1*r1*r1<<’_’;}private:intr1;};intmain(){Aa1;constAa2(4);a1.print(2);a2.print();return0;}運(yùn)行時(shí)的輸出結(jié)果是()。A、P8-E4B、P8-C16-C、P0-E4-D、P0-C16-標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:在主函數(shù)中創(chuàng)建a1對(duì)象時(shí),調(diào)用類A的默認(rèn)構(gòu)造函數(shù),其數(shù)據(jù)成員r1的值等于0。當(dāng)執(zhí)行a1.print(2)語句時(shí),調(diào)用帶參數(shù)的print成員函數(shù),所以輸出結(jié)果為p0-,對(duì)象a2為常成員,所以其成員變量r1的值等于4,因?yàn)槌?duì)象只能調(diào)用常成員函數(shù),所以當(dāng)執(zhí)行語句a2.print()語句時(shí),輸出結(jié)果為C14-。24、已知函數(shù)print()沒有返回值,如果在類中將之聲明為常成員函數(shù),正確的是()。A、voidprint()const;B、constvoidprint();C、voidconstprint();D、voidprint(const);標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:eonst成員函數(shù)表示該成員函數(shù)只能讀類數(shù)據(jù)成員,而不能修改類成員數(shù)據(jù)。定義const成員函數(shù)時(shí),把const關(guān)鍵字放在函數(shù)的參數(shù)表和函數(shù)體之間。25、有如下程序:#include<iostream>usingnamespacestd;classSample{friendlong>>fun(Samples);public:Sample(longa){x==a;}private:};longfun(Samples){if(s.x<2)return1:returns.X*fun(Sample(s.x-1)):}intmain(){intsum=0;for(inti=0;i<6;i++){sum+=fun(Sample(i));}return0;}運(yùn)行時(shí)輸出的結(jié)果是()。A、120B、16C、154D、34標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是友元函數(shù)和遞歸函數(shù)。因?yàn)閒un函數(shù)是Sample類的友元函數(shù),所以fun函數(shù)可以直接訪問Sample類對(duì)象的私有成員x。主函數(shù)調(diào)用fun函數(shù),構(gòu)造參數(shù)為0~5。當(dāng)n小于2時(shí),fun函數(shù)返回1,其余返回值為n*fun(n-1)。n取0~5的值時(shí)fun(n)依次為1,1,2,6,24,120,累加結(jié)果為154。26、已知類MyClass聲明如下:classMyClass{intn;public:MyClass(intk):n(k){}intgetValue()const{returnn;}};在下列數(shù)組定義中正確的是()。A、MyClassx1[2];B、MyClassx2[2]={newMyClass(1),newMyClass(2)};C、MyClass*x3[2];D、MyClass*x4[2]={MyClass(1),MyClass(2)};標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:考查的是對(duì)象數(shù)組。選項(xiàng)A中在建立對(duì)象數(shù)組時(shí)也同樣需要調(diào)用構(gòu)造函數(shù):選項(xiàng)B和D的類型不匹配,B中不能將指針傳給非指針,D中是將非指針傳給指針。國家二級(jí)C++機(jī)試(類和對(duì)象)模擬試卷第2套一、選擇題(本題共24題,每題1.0分,共24分。)1、有如下類定義:classFoo{public:Foo(intv):value(v){}//①~Foo(){}//②private:Foo(){}//③intvalue=0;//④};其中存在語法錯(cuò)誤的行是()。A、①B、②C、③D、④標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:此題考查的是類的定義。C++語言規(guī)定,在類體內(nèi)不允許對(duì)所定義的數(shù)據(jù)成員進(jìn)行初始化。2、以下關(guān)鍵字不能用來聲明類的訪問權(quán)限的是()。A、publicB、staticC、protectedD、private標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是類的訪問權(quán)限。在C++語言中,類的訪問權(quán)限有公有、保護(hù)和私有三種。故本題選B。3、下列有關(guān)類成員的敘述中,正確的是()。A、友元函數(shù)是類的成員函數(shù)B、類成員的默認(rèn)訪問權(quán)限是私有的C、類成員函數(shù)必須聲明為公有的D、類的靜態(tài)數(shù)據(jù)成員不能是常成員標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是類成員的有關(guān)概念。類的友元函數(shù)可以直接訪問該類的所有成員,但它不是類的成員函數(shù),故選項(xiàng)A錯(cuò)誤;類成員函數(shù)的訪問權(quán)限可以聲明為公有、保護(hù)、私有,故選項(xiàng)C錯(cuò)誤;靜態(tài)數(shù)據(jù)成員的聲明是使用關(guān)鍵字static。它可以是常成員,故選項(xiàng)D錯(cuò)誤。4、有如下兩個(gè)類定義:classAA{};classBB{AAv1,*v2;BBv3:int*v4;};其中有一個(gè)成員變量的定義是錯(cuò)誤的,這個(gè)變量是()。A、vlB、v2C、v3D、v4標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:在定義類的數(shù)據(jù)成員時(shí),類中的數(shù)據(jù)成員可以是任意類型,包括整型、浮點(diǎn)型、字符符型、數(shù)組、指針和引用等,也可以是對(duì)象。但是要注意,只有另外一個(gè)類的對(duì)象,才可以作為該類的成員,即作為類的成員對(duì)象存在。自身類的對(duì)象是不可以作為自身類的成員存在,但自身類的指針可以。對(duì)于本題,在定義類BB時(shí),不能包括其對(duì)象v3。5、建立一個(gè)類對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用()。A、析構(gòu)函數(shù)B、構(gòu)造函數(shù)C、靜態(tài)函數(shù)D、友元函數(shù)標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:建立一個(gè)類的對(duì)象時(shí),編譯程序需要為對(duì)象分配存儲(chǔ)空間,進(jìn)行必要的初始化。在c++中,這項(xiàng)工作是由構(gòu)造函數(shù)來完成。6、有如下程序:#includeusingnamespacestd;classPoint{public:staticintnumber;public:Pointo{number++;}~Point(){number--;}};intPoint::number--0:voidmain(){Point*ptr;PointA,B;{Point*ptr_point=newPoint[3];ptx=ptr_point;}PointC:Gout+Point::number+endl;delete[]ptr;}運(yùn)行時(shí)輸出的結(jié)果是()。A、3B、4C、6D、7標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題是靜態(tài)成員、對(duì)象的構(gòu)造和對(duì)象的生存期等知識(shí)點(diǎn)的綜合考查。此題定義了一個(gè)靜態(tài)成員變量number,初始值為0。主函數(shù)中第2行定義了2個(gè)Point對(duì)象,此時(shí)number變?yōu)?;隨后new運(yùn)算符又定義了一個(gè)包含3個(gè)Point對(duì)象元素的數(shù)組,其通過delete結(jié)束后number的值變?yōu)?;然后又定義了一個(gè)Point對(duì)象C,number變?yōu)?;最后輸出number的內(nèi)容。7、下列情況中,不會(huì)調(diào)用拷貝構(gòu)造函數(shù)的是()。A、用一個(gè)對(duì)象去初始化同一類的另一個(gè)新對(duì)象時(shí)B、將類的一個(gè)對(duì)象賦值給該類的另一個(gè)對(duì)象時(shí)C、函數(shù)的形參是類的對(duì)象,調(diào)用函數(shù)進(jìn)行形參和實(shí)參結(jié)合時(shí)D、函數(shù)的返回值是類的對(duì)象,函數(shù)執(zhí)行返回調(diào)用時(shí)標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是復(fù)制構(gòu)造函數(shù)的概念。用一個(gè)已知的對(duì)象初始化一個(gè)正在創(chuàng)建的同類對(duì)象時(shí),就會(huì)發(fā)生復(fù)制構(gòu)造函數(shù)。因此,選項(xiàng)A、C、D均會(huì)調(diào)用復(fù)制構(gòu)造函數(shù),而只有選項(xiàng)B沒有創(chuàng)建的動(dòng)作,不調(diào)用復(fù)制構(gòu)造函數(shù)。8、對(duì)于一個(gè)類定義,下列敘述中錯(cuò)誤的是()。A、如果沒有定義拷貝構(gòu)造函數(shù),編譯器將生成一個(gè)拷貝構(gòu)造函數(shù)B、如果沒有定義缺省的構(gòu)造函數(shù),編譯器將一定生成一個(gè)缺省的構(gòu)造函數(shù)C、如果沒有定義構(gòu)造函數(shù),編譯器將生成一個(gè)缺省的構(gòu)造函數(shù)和一個(gè)拷貝構(gòu)造函數(shù)D、如果已經(jīng)定義了構(gòu)造函數(shù)和拷貝構(gòu)造函數(shù),編譯器不會(huì)生成任何構(gòu)造函數(shù)標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是構(gòu)造函數(shù)。如果一個(gè)類中沒有定義任何構(gòu)造函數(shù),編譯器將生成一個(gè)不帶參數(shù)的公有缺省構(gòu)造函數(shù)。但只要定義了一個(gè)任意的構(gòu)造函數(shù),就不會(huì)生成缺省構(gòu)造函數(shù)了。9、有如下類定義:classMyClass{Intvalue;public;MyClass(intn):value(n){)intgerValue()const{returnvalue;}};則類MyClass的構(gòu)造函數(shù)的個(gè)數(shù)是()。A、1個(gè)B、2個(gè)C、3個(gè)D、4個(gè)標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:此題考查的是構(gòu)造函數(shù)的概念。構(gòu)造函數(shù)的名字必須與類名相同;構(gòu)造函數(shù)不指定返回值類型;構(gòu)造函數(shù)可以重載:在創(chuàng)建對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù)。10、有如下程序:#includeusingnamespacestd:classMyClass{public:MyClass(inti=0){tout<<1;}MyClass(constMyClass&x){cout<<2;}MyClass&operator=(constMyClass&x){cout<<3;return*this;}~MyClass(){cout<<4;}};intmain(){MyClassobj1(1),obj2(2),obj3(obj1);return0:)運(yùn)行時(shí)的輸出結(jié)果是()。A、112444B、11114444C、121444D、11314444標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:當(dāng)創(chuàng)建MyClass類對(duì)象obj1(1)和obj2(2)時(shí)候,調(diào)用類構(gòu)造函數(shù)會(huì)輸出兩個(gè)1,然后創(chuàng)建類對(duì)象obj3(obj(1))時(shí),會(huì)調(diào)用拷貝類構(gòu)造函數(shù),輸出一個(gè)2,然后當(dāng)main函數(shù)結(jié)束時(shí)候,調(diào)用三個(gè)對(duì)象的析構(gòu)函數(shù)會(huì)輸出三個(gè)4。11、Sample是一個(gè)類,執(zhí)行下面語句后,調(diào)用Sample類的構(gòu)造函數(shù)的次數(shù)是()。Samplea[2],*P=newSample;A、0B、1C、2D、3標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:在C++中,聲明一個(gè)類對(duì)象時(shí),編譯程序需要調(diào)用類的構(gòu)造函數(shù)為對(duì)象分配存儲(chǔ)空間,進(jìn)行必須的初始化。在本題的這條語句中,聲明了一個(gè)Sample類型的包含2個(gè)數(shù)組元素的數(shù)組a[2],一個(gè)指向類Sample對(duì)象的指針P,所以Sample類的構(gòu)造函數(shù)共調(diào)用了3次。12、有如下程序#includeusingnamespacestd;classTest{public:Test(){)Test(constTest&t){cout<<1;}};Testfun(Test&u){Testt=u;returnt;}intmain(){Testx,y;x=fun(y);return0;}運(yùn)行這個(gè)程序的輸出結(jié)果是()。A、無輸出B、1C、11D、111標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:在類Test中定義拷貝構(gòu)造函數(shù)Test(constTest&t),其函數(shù)體為輸出1,在主函數(shù)main中,當(dāng)執(zhí)行語句x=fun(y),調(diào)用拷貝函數(shù)用對(duì)象y的值構(gòu)造對(duì)象u,輸出1,在執(zhí)行函數(shù)fun()的return語句時(shí),調(diào)用拷貝函數(shù)構(gòu)造匿名對(duì)象,輸出1。13、有如下程序:#includeusingnamespacestd;classXA{inta;public:staticintb;XA(intaa):a(aa){b++;}~XA(){}intget(){returna;)};hatXA::b=0;intmain(){XAd1(2),d2(3);cout<A、5B、6C、7D、8標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:執(zhí)行XA類的實(shí)例變量d1(2)時(shí),成員函數(shù)d1.get()的返回值等于2,XA.b的值等于1,執(zhí)行XA類的實(shí)例變量d2(3)時(shí),成員函數(shù)d1.get()的返回值等于3,XA.b的值等于2,所以輸出結(jié)果為2+3+2=7。14、下列關(guān)于類成員對(duì)象構(gòu)造函數(shù)調(diào)用順序的敘述中,正確的是()。A、與它們?cè)诔跏蓟斜碇械捻樞蛳嗤珺、與它們?cè)陬愔新暶鞯捻樞蛳嗤珻、與析構(gòu)函數(shù)的調(diào)用順序相同D、順序不確定標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:類成員對(duì)象構(gòu)造函數(shù)的調(diào)用是按照在類中定義的順序進(jìn)行的,而不是按照構(gòu)造函數(shù)說明后的冒號(hào)順序進(jìn)行構(gòu)造的。15、有如下頭文件:intfl();staticintf2();classMA{public:intf3();staticintf();};在所描述的函數(shù)中,具有隱含的this指針的是()。A、f1B、f2C、f3D、f4標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是this指針。this指針是一個(gè)隱含的指針,它隱含于每個(gè)類的非靜態(tài)成員函數(shù)中,它明確地表示出了成員函數(shù)當(dāng)前操作的數(shù)據(jù)所屬的對(duì)象。題目中,只有f3()滿足“類的非靜態(tài)成員函數(shù)”的要求,故應(yīng)選C選項(xiàng)。16、有如下程序:#includeusingnamespacestd;classTest{public:Test(){n+=2;}~Test(){n-=3;}staticintgetNum(){returnn;}private:staticintn;};intTest::n=1;intmain(){Test*p=newTest;deletep;cout<<”n=”<A、n=0B、n=1C、n=2D、n=3標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:此題考查的是靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)。靜態(tài)數(shù)據(jù)成員是類中所有對(duì)象共享的成員,而不是某個(gè)對(duì)象的成員。題目中的靜態(tài)數(shù)據(jù)成員n的運(yùn)算具有疊加性,執(zhí)行“n+=2”和“n-=3”后n的值為0。17、有如下類定義:classPoint{private;staticinthow_many;};________how_many=0;要初始化Point類的靜態(tài)成員howmany,下劃線處應(yīng)填入的內(nèi)容是()。A、ingB、staticintC、intPoint::D、staticintPoint::標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是靜態(tài)數(shù)據(jù)成員的初始化。靜態(tài)數(shù)據(jù)成員應(yīng)在類體外進(jìn)行初始化,且初始化的一般格式為:數(shù)據(jù)類型類名::靜態(tài)數(shù)據(jù)成員名=初始值。18、有如下類定義:classSample{public;Sample(intx):ref(x){}//①private:Sample():ref(0){}//②staticintval=5;//③constintref;//④};上述程序段中,錯(cuò)誤的語句是()。A、①B、②C、③D、④標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:靜態(tài)整型數(shù)據(jù)不能定義為類的數(shù)據(jù)成員。19、由于常對(duì)象不能被更新,因此()。A、通過常對(duì)象只能調(diào)用它的常成員函數(shù)B、通過常對(duì)象只能調(diào)用靜態(tài)成員函數(shù)C、常對(duì)象的成員都是常成員D、通過常對(duì)象可以調(diào)用任何不改變對(duì)象值的成員函數(shù)標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:此題考查的是常對(duì)象與常成員函數(shù)的概念。使用const關(guān)鍵字修飾的對(duì)象稱為常對(duì)象,它不能被更新,所以常對(duì)象只能調(diào)用常成員函數(shù)而不能調(diào)用其它成員函數(shù);使用const關(guān)鍵字聲明的成員函數(shù)是常成員函數(shù),它也不能被更新,常成員函數(shù)只能調(diào)用常成員函數(shù)而不能調(diào)用其它函數(shù)。20、有如下程序:#includeusingnamespacestd;classMyClass{public:MyClass(intx):Val(x){}voidSet(intx){val=x;}voidPrint()const{cout<<"val="<A、語句1B、語句2C、語句3D、語句4標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:在創(chuàng)建類對(duì)象obj1(10)時(shí),前面有關(guān)鍵字const,所以當(dāng)語句3調(diào)用obj1的成員函數(shù)試圖修改其私有成員的數(shù)值的時(shí)候,會(huì)編譯出錯(cuò)。21、有如下程序:#includeusingnamespacestd;classA{public:A(inti=0):r1(i){}voidprint(){cout<<ˊEˊ<A、P8-E4B、P8-C16-C、P0-E4-D、P0-C16-標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:在主函數(shù)中創(chuàng)建a1對(duì)象時(shí),調(diào)用類A的默認(rèn)構(gòu)造函數(shù),數(shù)據(jù)成員r1的值等于0。當(dāng)執(zhí)行a1.print(2)語句時(shí),調(diào)用帶參數(shù)的print成員函數(shù),所以輸出結(jié)果為p0-,對(duì)象a2為常成員,所以其成員變量r1的值等于4,因?yàn)槌?duì)象只能調(diào)用常成員函數(shù),所以當(dāng)執(zhí)行語句a2.print()語句時(shí),輸出結(jié)果為C14-。22、已知函數(shù)print()沒有返回值,如果在類中將之聲明為常成員函數(shù),正確的是()。A、voidprint()const;B、constvoidprint();C、voidconstprint();D、voidprint(const);標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:const成員函數(shù)表示該成員函數(shù)只能讀類數(shù)據(jù)成員,而不能修改類成員數(shù)據(jù)。定義const成員函數(shù)時(shí),把const關(guān)鍵字放在函數(shù)的參數(shù)表和函數(shù)體之間。23、有如下程序:#includeusingnamespacestd;classSample{friendlongfun(Samples);public:Sample(longa){x=a;}private:longx;};longfun(SampleS){if(s.x<2)return1:returns.x*fun(Sample(s.x-1)):}intmain(){intsum=0;for(inti=0;i<6;i++){sum+=fun(Sample(i));}cout<A、120B、16C、154D、34標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是友元函數(shù)和遞歸函數(shù)。因?yàn)閒un函數(shù)是Sample類的友元函數(shù),所以fun函數(shù)可以直接訪問Sample類對(duì)象的私有成員x。主函數(shù)調(diào)用fun函數(shù),構(gòu)造參數(shù)為0~5。當(dāng)n小于2時(shí),fun函數(shù)返回1,其余返回值為n*fun(n-1)。n取0~5的值時(shí)fun(n)依次為1,1,2,6,24,120,累加結(jié)果為154。24、己知類MyClass聲明如下:classMyClass{intn;public:MyClass(intk):n(k){}intgetValue()const{returnn;}};在下列數(shù)組定義中正確的是()。A、MyClassx1[2];B、MyClassx2[2]={newMyClass(1),newMyClass(2)};C、MyClass*x3[2];D、MyClass*x4[2]={MyClass(1),MyClass(2)};標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:考查的是對(duì)象數(shù)組。選項(xiàng)A中在建立對(duì)象數(shù)組時(shí)也同樣需要調(diào)用構(gòu)造函數(shù):選項(xiàng)B和D的類型不匹配,B中不能將指針傳給非指針,D中是將非指針傳給指針。國家二級(jí)C++機(jī)試(類和對(duì)象)模擬試卷第3套一、選擇題(本題共22題,每題1.0分,共22分。)1、下列關(guān)于this指針的描述中,正確的是()。A、類的成員函數(shù)都有this指針B、類的友元函數(shù)都有this指針C、任何與類相關(guān)的函數(shù)都有this指針D、類的非靜態(tài)成員函數(shù)都有this指針標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:this是成員函數(shù)所屬對(duì)象的指針,它指向類對(duì)象的地址。成員函數(shù)通過這個(gè)指針可以知道自己屬于哪一個(gè)對(duì)象,它隱藏于每個(gè)類的非靜態(tài)成員函數(shù)中。2、有如下程序:#include<iostream>usingnamespacestd;classTest{public:Test(){n+=2;}~Test(){n-=3;}staticintgetNum0{returnn;}private:staticintn;};intTest::n=1;intmain(){Test*p=new"rest;deletep;tout<<’’n=’’<<Test::getNum()<<end1;return0;}執(zhí)行后的輸出結(jié)果是()。A、n=0B、n=1C、n=2D、n=3標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:此題考查的是靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)。靜態(tài)數(shù)據(jù)成員是類中所有對(duì)象共享的成員,而不是某個(gè)對(duì)象的成員。題目中的靜態(tài)數(shù)據(jù)成員n的運(yùn)算具有疊加性,執(zhí)行“n+=2”和“n-=3”后n的值為0。3、有如下程序:#include<iostream>usingnamespacestd;classObj{staticinti;public:Obj(){i++;}~Obj(){i--;}statichatgetVal(){returni;}};intObj::i=0;voidf(){Objob2;cout<<o(jì)b2.getVal();}intmain(){Objob1;f();Obj*ob3=newObj;cout<<o(jì)b3->getValq();deleteob3;cout<<Obj::getVal();return0;}程序的輸出結(jié)果是()。A、232B、231C、222D、221標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:此題考查的是靜態(tài)成員。本題中,Obj類定義了一個(gè)靜態(tài)數(shù)據(jù)成員i,并初始化為0在主函數(shù)中,首先定義了1個(gè)該類對(duì)象ob1,所以構(gòu)造函數(shù)被調(diào)用1次,i加1;然后調(diào)用函數(shù)f(),該函數(shù)中又定義了一個(gè)對(duì)象ob2,此時(shí)i再次加1變?yōu)?,然后通過函數(shù)getVal()揄出i的值2。f()函數(shù)結(jié)束,ob2變量被釋放,故析構(gòu)函數(shù)被調(diào)用了1次,i變成1;回到主函數(shù)中,又動(dòng)態(tài)創(chuàng)建了1個(gè)對(duì)象并讓ob3指向它,此后i變成2并輸出。最后釋放動(dòng)態(tài)創(chuàng)建的對(duì)象i變?yōu)?,輸出1。故最終的輸出結(jié)果是221。4、有如下程序:#include<iostream>usingnamespacestd;classMyClass{public:MyClass(){++count;}~MyClass(){--count;}staticintgetCount(){returncount;}private:staticintcount;};intMyClass::count=0;intmain(){MyClassobj;cout<<o(jì)bj.getCount();MyClass*ptr=newMyClass;cout<<MyClass::getCount();deleteptr;cout<<MyClass::getCount();return0;}程序的輸出結(jié)果是()。A、121B、232C、221D、122標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:此題考查的是靜態(tài)成員。靜態(tài)成員的特性是不管這個(gè)類創(chuàng)建了多少對(duì)象,它的靜態(tài)成員都只有一個(gè)拷貝副本,這個(gè)副本被所有屬于這個(gè)類的對(duì)象共享。題目中,首先定義了obj對(duì)象,其構(gòu)造函數(shù)使靜態(tài)數(shù)據(jù)成員cout增1,故輸出“1”;然后通過指針動(dòng)態(tài)創(chuàng)建了Myclass類的對(duì)象,構(gòu)造函數(shù)被再次調(diào)用,count變?yōu)?,輸出“2”;接著刪除創(chuàng)建的MyClass類的對(duì)象,調(diào)用析構(gòu)函數(shù),count減1變?yōu)?,輸出“1”。故最終輸出結(jié)果是121。5、有如下類定義:classPoint{private;staticinthow_many;};__how_many=0;要初始化Point類的靜態(tài)成員how_many,下劃線處應(yīng)填入的內(nèi)容是()。A、ingB、staticintC、intPoint::D、staticintPoint::標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是靜態(tài)數(shù)據(jù)成員的初始化。靜態(tài)數(shù)據(jù)成員應(yīng)在類體外進(jìn)行初始化,且初始化的一般格式為:數(shù)據(jù)類型類名::靜態(tài)數(shù)據(jù)成員名=初始值。6、有如下類和對(duì)象的定義:classConstants{public;staticdoublegetPl(){return3.1416;}};Constantsconstants;下列各組語句中,能輸出3.1416的是()。A、cout<<constants->getPI();和cout<<Constants::gerPI();B、cout<<constants.getPI();和cout<<Constants.getPI();C、cout<<constants->getaI();和cout<<Constants->getPI();D、cout<<constants.getPI();和cout<<Constants::getPI();標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:此題考查的是靜態(tài)成員函數(shù)的引用。getPI()是類C0nstants的靜態(tài)成員函數(shù)。引用靜態(tài)成員函數(shù)可以有兩種形式:一是通過類名直接進(jìn)行調(diào)用,例如類名::靜態(tài)成員函數(shù)名;另一種是用類的任何對(duì)象名進(jìn)行調(diào)用其作用僅是通過對(duì)象名間接的指出類名,例如constants.getPI()選項(xiàng)D即是這種調(diào)用方式。7、若AA為一個(gè)類,a為該類的非靜態(tài)數(shù)據(jù)成員,在該類的一個(gè)成員函數(shù)定義中訪問a時(shí),其書寫格式為()。A、aB、AA.a(chǎn)C、a{}D、AA::a{}標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:類AA的成員函數(shù)直接引用類AA的非靜態(tài)數(shù)據(jù)成員。8、有如下類定義:classSample{public;Sample(intx):ref(x){}//①private:Sample():ref(0){}//②staticintval=5;//③constintref;//④};上述程序段中,錯(cuò)誤的語句是()。A、①B、②C、③D、④標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:靜態(tài)整型數(shù)據(jù)不能定義為類的數(shù)據(jù)成員。9、已知類Myclass的定義如下classMyClass{public:voidfunction1(MyClass&c){cout<<c.data;}staticvoidfunction2(MyClass&c){cout<<c.data;}voidfunction3(){cout<<data;}staricvoidfunction4(){cout<<data;}private:intdata;};其中有編譯錯(cuò)誤的函數(shù)是()。A、function1B、function2C、function3D、functicIn4標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:funcyion4()函數(shù)作為類的靜態(tài)成員函數(shù),不能直接訪問類中說明的非靜態(tài)成員,即cout<<data在編譯時(shí)會(huì)出錯(cuò)。10、有如下程序:#include<iostream>usingnamespacestd;classXA{ima;public:staticintb;XA(intaa):a(aa){b++;}intgetA(){returna;}};intXA::b=0;intmain(){XAd1(4),d2(5);cout<<d1.getA()+d2.getA()+XA::b+d1.b<<end1;return0;}運(yùn)行這個(gè)程序的輸出結(jié)果是()。A、9B、11C、13D、15標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:在類XA的構(gòu)造函數(shù)中,定義了用成員變量a的值初始化變量aa,同時(shí)靜態(tài)成員變量b值加1。所以當(dāng)在主main函數(shù)中定義類xA的對(duì)象d1(4)后,變量b的等于1,定義對(duì)象d2(5)后,變量b的值等于2,所以表達(dá)式d1.getA()+d2.getA()::b+d1.b等于4+5+1+2+1=13。11、由于常對(duì)象不能被更新,因此()。A、通過常對(duì)象只能調(diào)用它的常成員函數(shù)B、通過常對(duì)象只能調(diào)用靜態(tài)成員函數(shù)C、常對(duì)象的成員都是常成員D、通過常對(duì)象可以調(diào)用任何不改變對(duì)象值的成員函數(shù)標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:此題考查的是常對(duì)象與常成員函數(shù)的概念。使用const關(guān)鍵字修飾的對(duì)象稱為常對(duì)象,它不能被更新,所以常對(duì)象只能調(diào)用常成員函數(shù)而不能調(diào)用其它成員函數(shù);使用const關(guān)鍵字聲明的成員函數(shù)是常成員函數(shù),它也不能被更新,常成員函數(shù)只能調(diào)用常成員函數(shù)而不能調(diào)用其它函數(shù)。12、有如下程序#include<iostream>usingnamespacestd;inti=1;classFun{public:staticinti;intvalue(){returni-1;}intvalue()const{returni+1;}};intFun::i=2;intmain(){inti=3;Funfun1;constFunfun2;return0;}若程序的輸出結(jié)果是:123則程序中下劃線處遺漏的語句是()。A、cout<<fun1.value()<<Fun::i<<fun2.value();B、cout<<Fun::i<<fun1.value()<<fun2.value();C、cout<<fun1.value()<D、cout<<fun2.value()<<Fun::i<<fun1.value();標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:此題考查的是常成員函數(shù)。const關(guān)鍵字可以用于參與重載函數(shù)的區(qū)分,此時(shí)常對(duì)象調(diào)用常成員函數(shù),一般對(duì)象調(diào)用一般成員函數(shù),當(dāng)類中只有一個(gè)常成員函數(shù)時(shí),一般對(duì)象也可以調(diào)用該常成員函數(shù)。本題中,通過fun1調(diào)用value()函數(shù)時(shí),是調(diào)用前一個(gè),而通過fun2調(diào)用value()函數(shù)是調(diào)用后一個(gè);另外,value()函數(shù)中訪問的i是類中定義的數(shù)據(jù)成員i,全局變量i在類中被“屏蔽”。fun1.value()輸出i-1=2-1=1;fun2.value()調(diào)用后一個(gè)value()函數(shù)輸出i+1=2+1=3;Fun::i是通過類名直接訪問類的靜態(tài)數(shù)據(jù)成員i的值,即2;所以正確的輸出順序是A選項(xiàng)。13、有如下程序:#include<iostream>usingnamespacestd;classVAC{public;intf()const{return3;}intf(){return5;}};Intmain(){VACv1;constVACv2;cout<<v1.f()<<v2.f();fetum0;}運(yùn)行時(shí)的輸出結(jié)果是()。A、53B、35C、55D、33標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:此題考查的是常成員函數(shù)的應(yīng)用。VAC類中說明了兩個(gè)函數(shù),一個(gè)是常成員函數(shù),一個(gè)是普通函數(shù);在主函數(shù)中說明了兩個(gè)對(duì)象,通過普通對(duì)象v1調(diào)用的是普通函數(shù),輸出5:通過常對(duì)象V2調(diào)用的是常成員函數(shù),輸出3。14、有如下程序:#include<iostream>usingnamespacestd;classMyClass{public:MyClass(intx):Val(x){}voidSet(intx){val=x;}voidPrint()const{cout<<’’val=’’<<val<<’\t’;}private:intval;};intmain(){constMyClassobj1(10);MyClassobj2(20);obj1.Print();//語句1obj2.Print();//語句2obj1.Set(20);//語句3obj2.Set(30);//語句4return0;}其主函數(shù)中錯(cuò)誤的語句是()。A、語句1B、語句2C、語句3D、語句4標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:在創(chuàng)建類對(duì)象obj1(10)時(shí),前面有關(guān)鍵字const,所以當(dāng)語句3調(diào)用obj1的成員函數(shù)試圖修改其私有成員的數(shù)值的時(shí)候,會(huì)編譯出錯(cuò)。15、有如下程序:#include<iostream>Usingnamespacestd;classA{public:A(inti):r1(i){}vgidprint(){cout<<’E’<<r1<<’-’;}voidprint()const{cout<<’C’<<r1*r1<<’-’;}private:intr1;};intmain(){Aa1(2);constA.a(chǎn)2(4);a1.print();a2.print();return0;}運(yùn)行時(shí)的輸出結(jié)果是()。A、運(yùn)行時(shí)出錯(cuò)B、E2-C16-C、C4-C16-D、E2-E4-標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:類A包括一個(gè)整型數(shù)據(jù)成員r1,一個(gè)一般成員函數(shù)print(),一個(gè)常成員函數(shù)print()const。在主函數(shù)中定義了對(duì)象a1,并對(duì)r1的值賦2和常對(duì)象a2,并對(duì)r1的值賦4,在C++中,常對(duì)象不能被更新,所以常對(duì)象只能調(diào)用類的常成員函數(shù),而不能調(diào)用一般成員函數(shù)。而一般的對(duì)象,既可以調(diào)用一般成員函數(shù)也可以調(diào)用常成員函數(shù)。所以在本題中,當(dāng)執(zhí)行a1.print()時(shí),輸出為E2-,執(zhí)行a2.print()時(shí),輸出為c16-。16、某類中有一個(gè)無參且無返回值的常成員函數(shù)Show,則正確的Show函數(shù)原型是()。A、constvoidShow();B、voidconstShow();C、voidShow()const;D、voidShow(const);標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:常成員函數(shù)的說明格式如下:<返回類型><成員函數(shù)名>(<參數(shù)表>)const;,所以對(duì)于本題來說無參且無返回值的常成員函數(shù)show,其正確的函數(shù)原型是選項(xiàng)C。17、已知函數(shù)print()沒有返回值,如果在類中將之聲明為常成員函數(shù),正確的是()。A、voidprint()const;B、constvoidprint();C、voidconstprint();D、voidprint(const);標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:const成員函數(shù)表示該成員函數(shù)只能讀類數(shù)據(jù)成員,而不能修改類成員數(shù)據(jù)。定義const成員函數(shù)時(shí),把const關(guān)鍵字放在函數(shù)的參數(shù)表和函數(shù)體之間。18、有如下類定義:classAA{inta;public;intgetRef()const{return&a;}//①intgetValue()const{returna;}//②voidset(intn)const{a=n;}//③friendvoidshow(AAaa)const{cout<<a;}//④};其中的四個(gè)函數(shù)定義中正確的是()。A、①B、②C、③D、④標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查了常成員函數(shù)和友元函數(shù)的概念。選項(xiàng)A中,getRef()函數(shù)的返回值和函數(shù)函數(shù)類型不符,故錯(cuò)誤;C選項(xiàng)中set()常成員函數(shù)改變了數(shù)據(jù)成員的值,這是不允許的:D選項(xiàng)中show()函數(shù)被同時(shí)定義成友元函數(shù)和常成員函數(shù)是錯(cuò)誤的。19、有如下程序:#include<iostream>usingnamespacestd;classSample{friendlongfun(Samples);public:Sample(longa){x=a;}private:longx;};longfun(Samples){if(s.x<2)return1:returns.x*fun(Sample(s.x-1)):}intmain(){intsum=0;for(inti=0;i<6;i++){sum+=fun(Sample(i));}cout<<sum;return0;}運(yùn)行時(shí)輸出的結(jié)果是()。A、120B、16C、154D、34標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是友元函數(shù)和遞歸函數(shù)。因?yàn)閒un函數(shù)是Sample類的友元函數(shù),所以fun函數(shù)可以直接訪問Sample類對(duì)象的私有成員x。主函數(shù)調(diào)用fun函數(shù),構(gòu)造參數(shù)為0~5。當(dāng)n小于2時(shí),fun函數(shù)返回1,其余返回值為n*fun(n-1)。n取0~5的值時(shí)fun(n)依次為1,1,2,6,24,120,累加結(jié)果為154。20、有如下程序:#include<iostream>usingnamespacestd;classBoat;classCar{public:Car(inti):weight(i){}MendintTotal(constCar&c,constBoat&b);//①private:intweight;};classBoat{public:Boat(inti):weight(i){}MendintTotal(constCar&c,constBoat&b);private:intweight;};intTotal(constCar&c,constBoat&b){//②returnc.weight+b.weight;}intmain(){Carc(10);Boatb(8);cout<<’’Thetotalweightis’’<<Total(c,b)<<endl;//③return0;}下列關(guān)于程序的描述中,正確的是()。A、程序編譯正確B、程序編譯時(shí)語句①出錯(cuò)C、程序編譯時(shí)語句②出錯(cuò)D、程序編譯時(shí)語句③出錯(cuò)標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:程序中定義了類Car和類Boat,在兩個(gè)類中分別定義他們的構(gòu)造函數(shù)和友元函數(shù)friend。程序在VC6.0中編譯通過。21、已知類MyClass聲明如下:classMyClass{intn;public:MyClass(intk):n(k){}intgetValueoconst{returnn;}};在下列數(shù)組定義中正確的是()。A、MyClassx1[2];B、MyClassx2[2]={newMyClass(1),newMyClass(2)};C、MyClass*x3[2];D、MyClass*x4[2]={MyClass(1),MyClass(2)};標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:考查韻是對(duì)象數(shù)組。選項(xiàng)A中在建立對(duì)象數(shù)組時(shí)也同樣需要調(diào)用構(gòu)造函數(shù):選項(xiàng)B和D的類型不匹配,B中不能將指針傳給非指針,D中是將非指針傳給指針。22、已知類Myclass的定義如下:classMyClass{public:MyClass(intd){data=d;}~MyClass(){}private:intdata;};下列對(duì)Myclass類對(duì)象數(shù)組的定義和初始化語句中,正確的是()。undefinedA、MyClassarrays[2];B、MyClassarrays[2]={MyClass(5)};C、MyClassarrays[2]={MyClass(5),MyClass(6)};D、MyClass*arrays=newMyClass[2];標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:在選項(xiàng)C中定義了類MyClass對(duì)象數(shù)組arrays[2],并用對(duì)象MyClass(5)和MyClass(6)對(duì)這個(gè)數(shù)組中的兩個(gè)元素賦初值。國家二級(jí)C++機(jī)試(類和對(duì)象)模擬試卷第4套一、選擇題(本題共24題,每題1.0分,共24分。)1、有如下類聲明:classSAMPLE{intn;public:SAMPLE(inti=0):n(i){}voidsetValue(intn0);};下列關(guān)于getValue成員函數(shù)的實(shí)現(xiàn)中,正確的是()。A、SAMPLE::setValue(intn0){n=n0;}B、voidSAMPLE::setValue(intn0){n=n0;}C、voidsetValue(intn0){n=n0;}D、(intn0){n=n0;}標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查了成員函數(shù)的定義格式。在類外部對(duì)成員函數(shù)定義時(shí)的一般格式為:返回類型類名::成員函數(shù)名(參數(shù)表){函數(shù)體},故此題正確答案為選項(xiàng)B。2、如果派生類以protected方式繼承基類,則原基類的protected成員和public成員在派生類中的訪問屬性分別是()。A、public和publicB、public和protectedC、protected和publicD、protected和protected標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:此題考查的是基類成員在派生類中的訪問屬性。派生類中的成員不能訪問基類中的私有成員,可以訪問基類中的公有成員和保護(hù)成員。派生類從基類公有繼承時(shí),基類的公有成員和保護(hù)成員在派生類中仍然是公有成員和保護(hù)成員;派生類從基類私有繼承時(shí),基類的公有成員和保護(hù)成員在派生類中都變成私有成員;派生類從基類保護(hù)繼承時(shí),基類的公有成員在派生類中變成保護(hù)成員,基類的保護(hù)成員在派生類中仍然是保護(hù)成員。3、有如下程序:#include<iostream>#include<cstring>usingnamespacestd;classXCD{char*a;intb;public:XCD(char*aa,intbb){a=newchar[strlen(aa)+1];strcpy(a,aa);b=bb;}char*Geta(){returna;}intGetb(){returnb;}};intmain(){char*p1="abcd",*p2="weirong";intd1=6,d2=8;XCDx(p1,d1),y(p2,d2);cout<<strlen(x.Geta())+y.Getb()<<endl;return0;}運(yùn)行時(shí)的輸出結(jié)果是()。A、12B、16C、14D、11標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:由類XCD的定義可知,成員函數(shù)Geta()返回的是字符串的長度,Getb()返回的是參數(shù)b的值。在主函數(shù)中strlen(x.Geta())的值等于4,y.Getb()的值等于8,所以輸出兩者的和為12。4、若AA為一個(gè)類,a為該類的私有整型數(shù)據(jù)成員,getA()為該類的一個(gè)非靜態(tài)公有成員函數(shù),功能是返回a的值。如果x為該類的一個(gè)對(duì)象,要在類外訪問x對(duì)象中a的值,正確的訪問格式為()。A、AA.getA()B、x.getA()C、x.a(chǎn)D、AA::a標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:要在類外訪問x對(duì)象中a的值,必須調(diào)用類的非靜態(tài)公有成員函數(shù)getAO。5、若有如下類聲明classMyClass{public:MyClass(){cout<<1;}};執(zhí)行下列語句MyClassa,b[2],*p1[]2:以后,程序的輸出結(jié)果是()。A、11B、111C、1111D、11111標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:此題考查的是對(duì)象的構(gòu)造。本題共聲明了一個(gè)MyClass對(duì)象a,一個(gè)包含2個(gè)MyClass對(duì)象的數(shù)組b和一個(gè)包含2個(gè)MyClass對(duì)象指針的數(shù)組p,所以一共創(chuàng)建了3個(gè)MyClass類的對(duì)象,即調(diào)用了3次構(gòu)造函數(shù)。6、要定義一個(gè)引用變量p,使之引用類MyClass的一個(gè)對(duì)象,正確的定義語句是()。A、MyClassp=MyClass;B、MyClassp=newMyClass;C、MyClass&p=newMyClass;D、MyClassa,&p=a;標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:在選項(xiàng)D)中,定義了MyClass類的一個(gè)對(duì)象a和引用變量p,并且聲明p初始化為對(duì)a的引用。7、有如下類定義:classMyClass{intx;public:MyClass():x(0),y(0){}intGetX(){returnx;}voidSetX(intxx){x=xx;}inty;};已知obj是類MyClass的對(duì)象,下列語句中違反類成員訪問控制權(quán)限的是()。A、obj.xB、obj.yC、obj.GetX()D、obj.SetX(0)標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:由類MyClass的定義可知,數(shù)據(jù)成員x屬于私有成員,所以只能在類的內(nèi)部訪問。類MyClass的對(duì)象obj不能訪問類MyClass的私有成員x。8、有如下類定義:classPoint{intx_,y_;public:Point():x_(0),y_(0){}Point(intx,haty=0):x_(x),y_(y){}};若執(zhí)行語句Pointa(2),b{3},*c[4];則Point類的構(gòu)造函數(shù)被調(diào)用的次數(shù)是()。A、2次B、3次C、4次D、5次標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:此題考查的是類的構(gòu)造函數(shù)。構(gòu)造函數(shù)在對(duì)象創(chuàng)建的時(shí)候由系統(tǒng)自動(dòng)調(diào)用。在Pointa(2),b[3],*c[4]語句中:a(2)是定義一個(gè)對(duì)象并傳入構(gòu)造函數(shù)2,所以此時(shí)會(huì)調(diào)用以此構(gòu)造函數(shù);b[3]是定義一個(gè)包含3個(gè)對(duì)象的數(shù)組,所以構(gòu)造函數(shù)會(huì)被調(diào)用3次:*c[4]定義的是4個(gè)Point類對(duì)象指針的數(shù)組,它并沒有創(chuàng)建任何Point對(duì)象,所以不調(diào)用構(gòu)造函數(shù)。9、有如下程序:#include<iostrearn>usingnamespacestd;classtest{private:inta;public:,test0{cout+"constructor"+endl;}test(inta){cout+a+endl;}test(consttest&test){a=test.a(chǎn);cout+"copyconstmctor"+endl;}test(){Cout+"destructor"+endl;}};intmain(){testA(3);return0;}運(yùn)行時(shí)輸出的結(jié)果是()。A、3B、constructordestmctorC、copyconstructordestructorD、3destructor標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:此題考查的是構(gòu)造函數(shù)和析構(gòu)函數(shù)。一個(gè)類可以有多個(gè)構(gòu)造函數(shù),但只能有一個(gè)析構(gòu)函數(shù)。每一個(gè)對(duì)象在被創(chuàng)建時(shí),都會(huì)隱含調(diào)用眾多構(gòu)造函數(shù)中的一個(gè),而在銷毀時(shí)又會(huì)隱含調(diào)用唯一的析構(gòu)函數(shù)。此題中,主函數(shù)創(chuàng)建對(duì)象A是會(huì)隱含調(diào)用test(inta)這個(gè)構(gòu)造函數(shù),輸出3:接著主函數(shù)結(jié)束,對(duì)象A銷毀又隱含調(diào)用~test()析構(gòu)函數(shù)輸出destructor。10、有如下程序:#include<iostream>usingnamespacestd;classBase{public:Base(intx=0){cout<<x;}};classDerived:publicBase{public:Derived(intx=0){cout<<x;}private:Baseval;};intmain(){Derivedd(1);return0;}程序的輸出結(jié)果是()。A、0B、1C、01D、001標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:此題考查的是類的構(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ù)。本題中,首先會(huì)構(gòu)造基類Base,調(diào)用Base類的構(gòu)造函數(shù),輸出0;然后還定義了一個(gè)Base類的對(duì)象,再次調(diào)用Base類的默認(rèn)構(gòu)造函數(shù)輸出0:最后構(gòu)造自身,因主函數(shù)中傳入了構(gòu)造參數(shù)1,所以輸出1。故最后輸出結(jié)果是:001。11、有如下程序:#include<ioStream>usingnamespacestd;classSample{public:Sample(){}~Sample(){cout<<’*’;}};intmain(){Sampletemp[2],*pTemp[2];return0;}執(zhí)行這個(gè)程序輸出星號(hào)(*)的個(gè)數(shù)為()。A、1B、2C、3D、4標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:在main函數(shù)中,定義了Sampletemp[2]的一個(gè)包含兩個(gè)對(duì)象的數(shù)組,還定義了一個(gè)*pTemp[2],是包含兩個(gè)指向類對(duì)象的指針的數(shù)組,故定義的指針當(dāng)main函數(shù)結(jié)束后是不會(huì)調(diào)用析構(gòu)函數(shù)的,只有包含兩個(gè)對(duì)象的數(shù)組temp[2]會(huì)調(diào)用析構(gòu)函數(shù),因此只輸出兩個(gè)*。12、有如下程序:#include<iostream>usingnamespacestd;classONE{intc;public:ONE():c(0){cout<<1;}ONE(intn):c(n){cout<<2;}};classTWO{ONEone1;ONEone2;public:TWO(intm):one2(m){cout<<3;}};intmain(){TWOt(4);return0;}運(yùn)行時(shí)的輸出結(jié)果是()。A、3B、23C、123D、213標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:由類TWO的定義可知,其成員為類ONE的兩個(gè)對(duì)象one1和one2。所以在主函數(shù)中構(gòu)建類TWO的對(duì)象t(4)時(shí),先后調(diào)用類ONE的構(gòu)造函數(shù)ONE():c(0){cout<<1;}和ONE(intn):c(n){cout<<2;}輸出12,然后再調(diào)用類TWO的構(gòu)造函數(shù)TWO(intm):one2(m){cout<<3;},輸出3。13、有如下程序:撐include<iostream>usingnamespacestd;className{charname[20];public:Name(){strcpy(name,"");cout<<’?’;}Name(char*fname){strepy(name,fname);cout<<’?’;}};intmain(){Namenames[3]={Name("張三"),Name("李四")};return0;}運(yùn)行此程序輸出符號(hào)?的個(gè)數(shù)是()。A、0B、1C、2D、3標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:類Name有兩個(gè)構(gòu)造函數(shù),在默認(rèn)構(gòu)造函數(shù)中,給字符數(shù)組name賦空值,并輸出一個(gè)?;在帶有字符指針的構(gòu)造函數(shù)中,把字符指針fname所指的字符串賦給字符數(shù)組name,并輸出一個(gè)?。所以在主函數(shù)中,定義了Name的三個(gè)對(duì)象,name[0]、name[1]、name[2],在創(chuàng)建這三個(gè)對(duì)象時(shí),會(huì)調(diào)用構(gòu)造帶參數(shù)的函數(shù)對(duì)前兩個(gè)對(duì)象賦值,調(diào)用默認(rèn)的構(gòu)造函數(shù)把name[2]的值賦為空值。這時(shí)會(huì)輸出三個(gè)“?”符號(hào)。14、有如下程序:#

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論