國家二級C++機試(選擇題)模擬試卷17(共214題)_第1頁
國家二級C++機試(選擇題)模擬試卷17(共214題)_第2頁
國家二級C++機試(選擇題)模擬試卷17(共214題)_第3頁
國家二級C++機試(選擇題)模擬試卷17(共214題)_第4頁
國家二級C++機試(選擇題)模擬試卷17(共214題)_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

國家二級C++機試(選擇題)模擬試卷17(共9套)(共214題)國家二級C++機試(選擇題)模擬試卷第1套一、選擇題(本題共21題,每題1.0分,共21分。)1、如果有以下定義及初始化:inta=3,*p=&a;則由此可以推斷,*p的值是()。A、變量a的值,即3B、變量a的地址值C、變量P的地址值D、無意義標準答案:A知識點解析:題目中的定義初始化是定義一個整型變量a,初始化為3。而“int*p=&a;”是定義一個整型指針變量p,將變量a的地址作為指針變量p的初值。木p是指針變量p指向的存儲單元的內容,即變量值。所以木p指向a的值3。2、設樹T的深度為4,其中度為1,2,3,4的結點個數分別為4,2,1,1。則T中的葉子結點數為()。A、8B、7C、6D、5標準答案:B知識點解析:深度為m二叉樹其總結點數為2m-1=24-1=15??偨Y點數減去度為1,2,3,4的結點個數就是葉子結點數。15-4-2-1-1=7。3、軟件生命周期中的活動不包括()。A、市場調研B、需求分析C、軟件測試D、軟件維護標準答案:A知識點解析:軟件的生命周期描述了軟件從產生到最終消亡的全過程,生命周期中的活動包括需求分析、軟件設計(分為概要設計和詳細設計)、軟件實現、軟件測試和軟件維護,不包括市場調研。4、軟件需求規(guī)格說明書的作用不包括()。A、軟件驗收的依據B、用戶與開發(fā)人員對軟件要做什么的共同理解C、軟件設計的依據D、軟件可行性研究的依據標準答案:D知識點解析:軟件規(guī)格說明書主要有三個作用:①用戶和軟件開發(fā)人員之間的合同;②開發(fā)人員進行設計和編程的依據:③軟件工程項目驗收的依據。5、下列關于C++預定義流對象的敘述中,正確的是()。A、cin是C++預定義的標準輸入流對象B、cin是C++預定義的標準輸入流類C、cout是C++預定義的標準輸入流對象D、eout是C++預定義的標準輸入流類標準答案:A知識點解析:cin是C++預定義的標準輸入流對象,cout是C++預定義的標準輸出流對象。6、有如下程序:#includeusingnamespacestd;classBase{public:virtualvoidShow(){cout<<’B’;});classDerived:publicBase{public:voidShow(){cout<<’D’;)};intmain(){Base*pl=newDerived;Derived*p2=newDerived;pl一>Show();p2一>Show();deletePl;deletep2;return0:)運行這個程序的輸出結果是()。A、BBB、BDC、DBD、DD標準答案:D知識點解析:在基類Base中定義了虛函數Show()輸出字符‘B’,而在派生類Derived中對虛函數Show()進行了重新定義,輸出字符‘D’。在主函數中對基類和派生類中的虛函數Show()進行了多態(tài)調用,此時調用的是派生類中重新定義的Show(),輸出字符‘D’。7、有如下函數定義:voidfunc(inta,int&b){a++;b++;}若執(zhí)行代碼段:intx=0,y=1;func(x,y);則變量x和y的值分別是()。A、0和1B、1和1C、0和2D、1和2標準答案:C知識點解析:此題考查的是函數參數的傳遞方式。此題中形參a是普通參數,即傳值調用,函數中對a增1不會影響到實參x的值;形參b是傳址調用,函數中對b增1同時會改變實參y的值。故最終結果是0和2。8、有如下程序:#inc1ude<iostream>usingnamespacestd;c1assMyClass{public:MyClass(intx):val(x){}voidPrint()const{cout<<"const:val="<<val<<’\t’;}voidPrint(){cout<<"val="<<val<<’t’;}private:intval,};intmain(){constMyClassobj1(10);MyClassobj2(20);obj1.Print();obj2.Print();return();}程序的輸出結果是()。A、val=10const:val=20B、const:val=10const:val=20C、const:val=10val=20D、val=10val=20標準答案:C知識點解析:此題考查的是常成員函數的重載。常成員函數是使用const關鍵字說明的函數。const關鍵字可用于區(qū)分重載函數。此時,常對象調用常成員函數,一般對象調用一般成員函數:題目中的Print()就是通過const重載的兩個成員函數,主函數中聲明的objl是常對象,obj2是一般對象。故輸出結果是const::val=10val—20。9、在語句“cout<<’A’:”中,cout是()。A、類名B、對象名C、函數名D、C++的關鍵字標準答案:B知識點解析:c++有四個預定義的流對象:cin標準輸,cout標準輸出,CelT標準出錯信息輸出,clog帶緩沖的標準出錯信息輸出。10、語句ofstreamf("SALARY.DAT",ios_base∷app);的功能是建立流對象f,并試圖打開文件SALARYDAT與f關聯(lián),而且()。A、若文件存在,將其置為空文件;若文件不存在,打開失敗B、若文件存在,將文件指針定位于文件尾;若文件不存在,建立一個新文件C、若文件存在,將文件指針定位于文件首;若文件不存在,打開失敗D、若文件存在,打開失敗:若文件不存在,建立一個新文件標準答案:B知識點解析:此題考查的是文件打開模式。文件打開模式iso_base∷app是為添加數據而打開(總是在尾部寫),故只有選項B說法正確。11、有如下程序:#include<iostream>usingnamespacestd;classObj{staticinti;public:Obj(){i++;}~Obj(){i--;}statichatgetVal(){returni;}};intObj::i=0;voidf(){Objob2;cout<<ob2.getVal();}intmain(){Objob1;f();Obj*ob3=newObj;cout<<ob3->getValq();deleteob3;cout<<Obj::getVal();return0;}程序的輸出結果是()。A、232B、231C、222D、221標準答案:D知識點解析:此題考查的是靜態(tài)成員。本題中,Obj類定義了一個靜態(tài)數據成員i,并初始化為0在主函數中,首先定義了1個該類對象ob1,所以構造函數被調用1次,i加1;然后調用函數f(),該函數中又定義了一個對象ob2,此時i再次加1變?yōu)?,然后通過函數getVal()揄出i的值2。f()函數結束,ob2變量被釋放,故析構函數被調用了1次,i變成1;回到主函數中,又動態(tài)創(chuàng)建了1個對象并讓ob3指向它,此后i變成2并輸出。最后釋放動態(tài)創(chuàng)建的對象i變?yōu)?,輸出1。故最終的輸出結果是221。12、有如下類定義和變量定義:classA{public:A(){data=0;}~A(){}intGetData()const{retumdata;}voidSetData(intn){data=n;}private:intdata;};constAa;Ab;下列函數調用中錯誤的是()。A、a.GetData();B、a.SetData(10);C、b.GetData();D、b.SetData(10);標準答案:B知識點解析:由題意可知a為常對象,因為常對象不能被更新,所以通過這個常對象只能調用它的常成員函數GetData(),而不能調用其他成員函數SetData(10),因而選項B為本題的正確答案。13、下列控制對齊方式的操作符中,錯誤的是()。A、internalB、centerC、leftD、right標準答案:B知識點解析:對齊方式的控制操作符1eR的含義是在設定的寬度內左對齊輸出,右端填已設定的填充字符;ri曲t(此為默認設置)在設定的寬度內右對齊輸出;intemal在設定的寬度內右對齊輸出,但若有符號(一或+),符號置于最左端。14、有如下類聲明: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知識點解析:此題考查的是派生類中構造函數的定義。派生類的構造首先要調用基類的構造函數,對基類成員初始化;然后對派生類中的新增成員初始化。格式為:派生類名(構造函數形參表)基類構造函數(形參表)。15、下列關于派生類和基類的描述中,正確的是()。A、派生類成員函數只能訪問基類的公有成員B、派生類成員函數只能訪問基類的公有和保護成員C、派生類成員函數可以訪問基類的所有成員D、派生類對基類的默認繼承方式是公有繼承標準答案:B知識點解析:派生類不論是采用那種繼承方式繼承基類,它的成員函數只能訪問基類的公有成員和保護成員。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標準答案:A知識點解析:此題考查的是靜態(tài)數據成員和靜態(tài)成員函數。靜態(tài)數據成員是類中所有對象共享的成員,而不是某個對象的成員。題目中的靜態(tài)數據成員n的運算具有疊加性,執(zhí)行“n+=2”和“n-=3”后n的值為0。17、若AA為一個類,a為該類的非靜態(tài)數據成員,在該類的一個成員函數定義中訪問a時,其書寫格式為()。A、aB、AA.aC、a{}D、AA::a{}標準答案:A知識點解析:類AA的成員函數直接引用類AA的非靜態(tài)數據成員。18、已知類Myclass的定義如下:classMyClass{public:MyClass(intd){data=d;}~MyClass(){}private:intdata;};下列對Myclass類對象數組的定義和初始化語句中,正確的是()。A、MyClassarrays[2];B、MyClassarrays[2]={MyClass(5)};C、MyClassarrays[2]={MyClass(5),MyClass(6)};D、MyClass*arrays=newMyClass[2];標準答案:C知識點解析:在選項C中定義了類MyClass對象數組arrays[2],并用對象MyClass(5)和MyClass(6)對這個數組中的兩個元素賦初值。19、已知Value是一個類,Value是Value的一個對象。下列以非成員函數形式重載的運算符函數原形中,正確的是()。A、Valueoperator+(Valuev,inti);B、Valueoperator+(ValueV=value,inti);C、Valueoperator+(Valuevinti=0);D、Valueoperator+(Valuev=value,inti=0);標準答案:B知識點解析:此題考查的是重載加法運算符“+”?!?”是二元運算符,其第一操作數是對象本身,i為第二操作數,由此可知選項B正確。20、打開文件時可單獨或組合使用下列文件打開模式()。①ios__base::app②ios__base::binary③ios__base::in④ios__base::out若要以二進制讀方式打開一個文件,需使用的文件打開模式為A、①⑧B、①④C、②③D、②④標準答案:D知識點解析:模式ios_base::binary作為二制進文件打開,ios_base::out為輸出而打開文件。21、在C++中,cin是一個()。A、類B、對象C、模板D、函數標準答案:B知識點解析:cin為istream流類的對象。國家二級C++機試(選擇題)模擬試卷第2套一、選擇題(本題共24題,每題1.0分,共24分。)1、閱讀下面程序:#include<iostream.h>fun(inta,intB.{intc;c=a+b:returnC;}voidmain(){intx=6,y=7,z=8,r;r=fun((x--,y++,x+y),z--);cout<<r<<end1;}則該程序的輸出結果是()。A、11B、20C、21D、31標準答案:C知識點解析:由主函數入手,定義變量x、y、z,然后調用函數fun,其中的參數為(x--,y++,x+y)的計算結果和z--的計算結果,所以調用fun(13,8)計算結果為21。2、有如下函數模板:template<classT>Tsquare(Tx){returnx,x;}其中T是()。A、函數形參B、函數實參C、模板形參D、模板實參標準答案:C知識點解析:此題考查的是函數模板。聲明一個函數模板的格式是:template<模板形參表聲明>函數聲明,{函數體}其中的<模板形參表聲明>是由一個或多個“模板形參”組成的,每個“模板形參”可具有以下幾種形式:typename參數名;class參數名;類型修飾參數名。3、一棵二叉樹中共有70個葉子結點與80個度為1的結點,則該二叉樹中的總結點數為()。A、219B、221C、229D、231標準答案:A知識點解析:在二叉樹中,葉子結點個數為n0,則度為2的結點數n2=n0-1。本題中葉子結點的個數為70,所以度為2的結點個數為69,因而總結點數=葉子結點數+度為1的結點數+度為2的結點數=70+80+69=219。4、對長度為10的線性表進行冒泡排序,最壞情況下需要比較的次數為A、9B、10C、45D、90標準答案:C知識點解析:線性表的長度為n,最壞情況下冒泡排序需要比較的次數為n(n-1)/2。5、已知函數FA調用FB,若要把這兩個函數定義在同一個文件中,則()。A、FA必須定義在FB之前B、FB必須定義在FA之前C、若FA定義在FB之后,則FA的原型必須出現在FB的定義之前D、若FB定義在FA之后,則FB的原型必須出現在FA的定義之前標準答案:D知識點解析:在C++中,在調用任何函數之前,必須確保它已有原型說明。函數原型說明通常放在程序文件的頭部,以使得該文件中所有函數都能調用它們。在本題中,當函數FA調用FB時,函數FB可以定義在FA的后面,但是FB的原型必須出現在FA的定義之前,因而選項D為正確答案。6、下列敘述中錯誤的是A、具有兩個根結點的數據結構一定屬于非線性結構B、具有兩個以上指針域的鏈式結構一定屬于非線性結構C、具有兩個以上葉子結點的數據結構一定屬于非線性結構D、具有一個根結點且只有一個葉子結點的數據結構也可能是非線性結構標準答案:B知識點解析:非線性結構,數學用語,其邏輯特征是一個結點元素可能有多個直接前趨和多個直接后繼。常見的非線性結構有:二維數組,多維數組,廣義表,樹(二又樹等),圖。7、下面敘述中錯誤的是()。A、軟件測試的目的是發(fā)現錯誤并改正錯誤B、對被調試的程序進行“錯誤定位”是程序調試的必要步驟C、程序調試通常也稱為DebugD、軟件測試應嚴格執(zhí)行測試計劃,排除測試的隨意性標準答案:A知識點解析:軟件測試是為了發(fā)現錯誤而執(zhí)行程序的過程。軟件測試要嚴格執(zhí)行測試計劃,排除測試的隨意性。程序調試通常也稱Debug,對被調試的程序進行“錯誤”定位是程序調試的必要步驟。8、下列描述中正確的是()。A、軟件測試的主要目的是發(fā)現程序中的錯誤B、軟件測試的主要目的是確定程序中錯誤的位置C、為了提高軟件測試的效率,最好由程序編制者自己來完成軟件測試的工作D、軟件測試是證明軟件沒有錯誤標準答案:A知識點解析:軟件測試是為了發(fā)現錯誤而執(zhí)行程序的過程。一個好的測試用例是指很可能找到迄今為止尚未發(fā)現的錯誤的用例;一個成功的測試是發(fā)現了至今尚未發(fā)現的錯誤的測試。為了達到好的測試效果,應該由獨立的第三方來構造測試,程序員應盡量避免檢查自己的程序。9、若實體A和B是一對多的聯(lián)系,實體B和C是一對一的聯(lián)系,則實體A和C的聯(lián)系是()。A、—對一B、一對多C、多對一D、多對多標準答案:B知識點解析:由于B和C有一一對應的聯(lián)系,而A和B只間有一對多的聯(lián)系,則通過關系之間的傳遞,則A和C之間也是一對多的聯(lián)系。10、類MyClass的定義如下:classMyClass{public:MyClass(){value=0;}SetVariable(inti){value=i;}private;intvalue;);則對下列語句序列正確的描述是()。MyClass*P,my;p=&my;A、語句p=&my;是把對象my賦值給指針變量PB、語句Myaass*p,my;會調用兩次類MyClass的構造函數C、對語句*p.SetVariable(5)的調用是正確的D、語句p->SetVariable(5)與語句my.SetVariable(5)等價標準答案:D知識點解析:選項A),語句p=&my;是把對象my的地址值賦值給指針變量p;選項B),語句MyClass*p,my;,由于p只是一個指向對象的指針,因此定義指針p不調用構造函數,所以此語句只調用一次構造函數;對成員函數的引用可以通過兩種形式:指針->成員函數(形參表)或者對象名.成語函數名(形參表),故選項C)錯誤,選項D)正確。11、有如下程序:#include<iostream>usingnamespacestd;classA{public;staticinta;voidinit(){a=1;}A(inta=2){init();a++;}};intA::a=0:Aobj;intmain(){cout<<obj.a;return0;}運行時輸出的結果是()。A、0B、1C、2D、3標準答案:B知識點解析:此題實際考查的是變量作用域的屏蔽效應。在C++中,當標識符的作用域發(fā)生重疊時,在一個函數中聲明的標識符可以屏蔽函數外聲明的標識符或全局標識符。聲明類A的全局對象時,構造函數首先調用int函數,但由于靜態(tài)成員變量a被構造函數內部的形參a所屏蔽所以a++改變的是形參a的值,對靜態(tài)成員變量a沒有影響。12、下列符號中能夠作為C++標識符的是()。A、constB、2aC、_shapeD、_count標準答案:C知識點解析:此題考查的是C++標識符。標識符是由數字、字母以及下劃線構成,其第一個字符必須是字母或下劃線,中間不能有空格;標識符的長度是任意的,但由于編譯系統(tǒng)的限制一般不超過31個字符;標識符中的大小寫字母是不同的;定義標識符時不能采用系統(tǒng)的保留字。13、計算斐波那契數列第n項的函數定義如下:intfib(intn){if(n==0)return1;elseif(n==1)return2;elsereturnfib(n-1)+fib(n-2);}若執(zhí)行函數調用表達式fib(2),函數fib被調用的次數是()。A、1B、2C、3D、4標準答案:B知識點解析:斐波那契數列是遞歸函數,所以fib(2)=fib(1)+fib(0)=2+1=3。因而執(zhí)行函數調用表達式fib(2)時,函數fib被調用的次是2次。14、若為Fraction類重載前增1運算符++,應在類體中將其聲明為()。A、Fraction&operator++();B、Fraction&operator++fint);C、friendFraction&operator++();D、friendFraction&operator++(int);標準答案:A知識點解析:在類Fraction中重載前增l運算符++時,其聲明形式為Fraction&operator++();在類Fraction中重載后增1運算符++時,其聲明形式為Fraction&operator++(int);。15、下列關于類成員對象構造函數調用順序的敘述中,正確的是()。A、與它們在初始化列表中的順序相同B、與它們在類中聲明的順序相同C、與析構函數的調用順序相同D、順序不確定標準答案:B知識點解析:類成員對象構造函數的調用是按照在類中定義的順序進行的,而不是按照構造函數說明后的冒號順序進行構造的。16、若已定義了類Vehicle,則下列派生類定義中;錯誤的是()。A、classCar:vehicle{/*類體略*/};B、classCar:publiccar{/*類體略*/};C、classCar:publicVehicle{/*類體略*/};D、classCar:virtualpublicVehicle{/*類體略*/};標準答案:B知識點解析:類Car不能派生自它本身。17、在類聲明中,緊跟在“public:”后聲明的成員的訪問權限是()。A、私有B、公有C、保護D、默認標準答案:B知識點解析:類中提供了3種訪問控制的權限:公有,私有和保護。其中公有類型定義了類的外部接口,任何一個外部的訪問都必須通過外部接口進行。私有類型的成員只允許本類的成員函數訪問,來自類外部的任何訪問都是非法的,保護類型介于公有類型和私有類型之間,在繼承和派生時可以體現出其特點。18、有如下程序:#includeusingnamespacestd;classBase{public:virtualvoidfunction1(){cout<<’0’;}voidfunction2(){cout<<’1’;}};classDerived:publicBase{public:voidfunction1(){cout<<’2’;}voidfunction2(){cout<<’3’;}};intmain(){Base*p=newDerived();p->function1();p->function2();return0;};運行時的輸出結果是()。A、01B、21C、03D、23標準答案:B知識點解析:函數function1()在基類Base中定義為虛成員函數,而在派生類Dervied中重新進行了定義,輸出字符2,函數function2()在基類Base中定義虛成員函數,在主函數中使用指向基類的指針變量p訪問function2()時,輸出1。19、有如下程序:#inc1ude<iostream>usingnamespacestd;classBase{public:virtualvoidShow(){cout<<’B’;}};classDerived:publicBase{public:voidShow(){cout<<’D’;}};intmain(){Base*p1=newDerived;Derived*p2=newDerived;pl一>Show();p2一>Show();deletep1;deletep2;return0;}運行這個程序的輸出結果是()。A、BBB、BDC、DBD、DD標準答案:D知識點解析:在基婁Base中定義了虛函數Show0輸出字符‘B’,而在派生類Derived中對虛函數Show()進行了重新定義,輸出字符‘D’。在主函數中對基類和派生類中的虛函數Show()進行了多態(tài)調用,此時調用的是派生類中重新定義的Show(),輸出字符‘D’。20、下列關于運算符重載的敘述中,正確的是()。A、通過運算符重載,可以定義新的運算符B、有的運算符只能作為成員函數重載C、若重載運算符+,則相應的運算符函數名是+D、重載一個二元運算符時,必須聲明兩個形參標準答案:B知識點解析:此題考查的是運算符重載。C++中,“=”、“[]”、“()”、“->”以及所有的類型轉換符只能作為成員函數重載,故B選項正確:運算符重載只是賦予已有的運算符多重含義,并不是定義新的運算符:運算符函數的函數名就是在運算符前加上關鍵字operator。21、己知在一個類體中包含如下函數原型:VOLUMEoperator-(VOLUME)const;,下列關于這個函數的敘述中,錯誤的是()。A、這是運算符-的重載運算符函數B、這個函數所重載的運算符是一個一元運算符C、這是一個成員函數D、這個函數不改變類的任何數據成員的值標準答案:B知識點解析:此題考查的是運算符的重載。運算符“-”有一元和二元兩種,在本題中它作為一個二元運算符,所以它不能更新對象的數據成員,也不能調用該類中沒有const修飾的成員函數。22、有如下類定義和變量定義:classParents{public:intpublicData;private:intprivateData;};classChildA:publicParents{/*類體略*/};classChildB:privateParents{/*類體略*/};ChildAa:ChildBb:下列語句中正確的是()。A、cout<B、cout<C、cout<D、cout<標準答案:A知識點解析:基類Parents的私有成員privateData在派生類ChildA和ChildB中是不可以訪問,所以選項B、D是錯誤,而派生類ChildB私有繼承基類Parents,所以基類Parents的公有成員publicData在派生類ChildB中變?yōu)樗接谐蓡T,只能在派生類ChildB內部訪問,因而選項c是錯誤的。派生類ChiIdA公有繼承基類Parents,所以基類Parents的公有成員publicData在派生類ChildA中可以訪問。23、下面是一個模板聲明的開始部分:templutedouble__由此可知()。A、這可能是一個函數模板的聲明B、這可能是一個類模板的聲明C、這既可能是一個函數模板的聲明,也可能是一個類模板的聲明D、這肯定是一個錯誤的模板聲明標準答案:A知識點解析:此題考查的是函數模板的聲明。聲明一個函數模板的格式是:template<模板形參表聲明>函數聲明;定義類模板的格式是:template<類型形參表>class<類模板名>{};。24、如果利用C++流進行輸入輸出,下面的敘述中正確的是()。A、只能借助于流對象進行輸入輸出B、只能進行格式化輸入輸出C、只能借助于cin和cout進行輸入輸出D、只能使用運算符>>和<<進行輸入輸出標準答案:A知識點解析:此題考查的知識點是C++流。利用C++流既可以進行有格式輸入輸出,也可以進行無格式輸入輸出,所以選項B錯誤:C++的4個預定義的流對象為:cin一標準輸入,cout一標準輸出,cerr一標準出錯信息輸出,clog一帶緩沖的標準出錯信息輸出,選項C錯誤;C++流除了可以使用提取“>>”插入“<<”進行輸入輸出外,還可以通過流對象的一些成員函數進行輸入輸出,故選項D錯誤。國家二級C++機試(選擇題)模擬試卷第3套一、選擇題(本題共19題,每題1.0分,共19分。)1、支持子程序調用的數據結構是()。A、棧B、樹C、隊列D、二叉樹標準答案:A知識點解析:棧是一種限定在一端進行插入與刪除的線性表。在土函數調用予函數時,要首先保存主函數當前的狀態(tài),然后轉去執(zhí)行子函數,把子函數的運行結果返回到主函數調用子函數時的位置,主函數再接著往下執(zhí)行,這種過程符合棧的特點。所以一般采用棧式存儲方式。2、下列關于this指針的描述中,正確的是()。A、類的成員函數都有this指針B、類的友元函數都有this指針C、任何與類相關的函數都有this指針D、類的非靜態(tài)成員函數都有this指針標準答案:D知識點解析:mis作用域是在類內部,當在類的非靜態(tài)成員函數中訪問類的非靜態(tài)成員時,編譯器會自動將對象本身的地址作為一個隱含參數傳遞給函數。另外,全局函數和靜態(tài)函數都不能使用this指針。所以答案為D。3、模板對類型的參數化提供了很好的支持,因此()。A、類模板的主要作用是生成抽象類B、類模板實例化時,編譯器將根據給出的模板實參生成一個類C、在類模板中的數據成員都具有同樣類型D、類模板中的成員函數都沒有返回值標準答案:B知識點解析:本題考查類模板的基本概念。類模板的定義和聲明都以關鍵字template開頭。關鍵字后面是一個用逗號分隔的模板參數表,用尖括號“<>”括起來,這個表被稱為類模板的模板參數表。類模板是類的抽象,類是類模板的實例。類模板使類中的一些數據成員和成員函數的參數或返回值可以取任意的數據類型。所以B選項正確。4、下列重載函數中,正確的是()。A、voidfun(inta,floatb);voidfun(intC,floatd)B、voidfun(inta,floatb);voidfun(floata,intb)C、floatfun(inta,floatb);intfun(intb,floata)D、intfun(inta,intb);floatfun(inta,intb)標準答案:B知識點解析:所謂函數重載是指同一函數名可以對應多個函數實現。進行函數重載時,要求同名函數在參數個數上不同,或者參數類型上不同。5、下列關于軟件工程的描述中正確的是()。A、軟件工程只是解決軟件項目的管理問題B、軟件工程主要解決軟件產品的生產率問題C、軟件工程的主要思想是強調在軟件開發(fā)過程中需要應用工程化原則D、軟件工程只是解決軟件開發(fā)中的技術問題標準答案:C知識點解析:軟件工程是建立并使用完善的工程化原則,以較經濟的手段獲得能在實際機器上有效運行的可靠軟件的一系列方法。軟件工程主要思想是強調在軟件開發(fā)過程中需要應用工程化原則。6、程序流程圖中帶有箭頭的線段表示的是()。A、圖元關系B、數據流C、控制流D、調用關系標準答案:C知識點解析:程序流程圖是一種傳統(tǒng)的、應用廣泛的軟件過程設計工具,通常也稱為程序框圖。其中,用帶箭頭的線段表示控制流,用柜形表示加工步驟,用菱形表示邏輯條件。7、下列關于this指針的描述中,正確的是()。A、類的成員函數都有this指針B、類的友元函數都有this指針C、任何與類相關的函數都有this指針D、類的非靜態(tài)成員函數都有this指針標準答案:D知識點解析:this是成員函數所屬對象的指針,它指向類對象的地址。成員函數通過這個指針可以知道自己屬于哪一個對象。它隱藏于每個類的非靜態(tài)成員函數中。8、有如下程序:#includeusingnamespacestd;classBase{public:Base(intx=0){cout<<x;)};classDerived:publicBase{public:Derived(intx=0){cout<<x;)private:Baseval;);intmain(){Derivedd(1);return0:}程序的輸出結果是()。A、0B、1C、01D、001標準答案:D知識點解析:此題考查的是類的構造。建立類的對象時,構造函數的執(zhí)行順序如下:執(zhí)行基類的構造函數,調用順序按照各個基類被繼承時聲明的順序(自左向右).>執(zhí)行成員對象的構造函數,調用順序按照各個成員對象在類中聲明的順序.>執(zhí)行自身的構造函數。本題中,首先會構造基類Base,調用Base類的構造函數,輸出0;然后還定義了一個Base類的對象,再次調用Base類的默認構造函數輸出0;最后構造自身,因主函數中傳入了構造參數l,所以輸出1。故最后輸出結果是:001。9、C++中的模板包括()。A、對象模板和函數模板B、對象模板和類模板C、函數模板和類模板D、變量模板和對象模板標準答案:C知識點解析:本題考查函數模板和類模板,所以答案為c。10、有以下程序,在橫線應添加()。#include<iostream>usingnamespacestd;classTestClass{public:TestClass(intn){number=n;}//拷貝構造函數~TestClass(){}private:intnumber;};TestClassfun(TestClassp){TestClasstemp(p);returntemp;}intmain(){TestClassobj1(10),obj2(0);TestClassobj3(obj1);obj2=fun(obj3);return0:}A、TestClass(TestClass&other){number=other.number;}B、TestClass(TestClassother){number=other.number;}C、TestClass(TestClass&other){number;}D、TestClass(&other){number=other.number;}標準答案:A知識點解析:拷貝構造函數也是構造函數,但它只有一個參數,這個參數是本類的對象,即other,所以賦值操作將本類的參數other.number賦值給number;而且采用對象的引用的形式,也就是&other。11、下列字符串中,正確的C++標識符是()。A、foo-1B、2bC、newD、256標準答案:D知識點解析:此題考查的是C++語言中標識符的定義。標識符由字母、數字或下劃線構成,但第一個字符必須是字母或下劃線;標識符中大小寫字母是不同的;用戶定義標識符時,不允許采用系統(tǒng)的關鍵字。12、若一個函數的原型為“int*Xfun1(intx,int&y,charz);”,則該函數的返回值類型為()。A、int*B、intC、int&D、char標準答案:A知識點解析:由“int*Xfun1(intx,int&y,charz);”的定義可知,其返回值為指向int指針的函數。13、下列選項中,正確的C++標識符是()。A、6_groupB、group-6C、age+3D、_group_6標準答案:D知識點解析:C++中標識符的命名遵循如下規(guī)則:不能是C++關鍵字,第一個字母必須是字母或下劃線,中間不能有空格,變量名中不能包括“.”、“;”、“,”、“’”、“’’”+-之類的特殊符號??傊畼俗R符中除了能使用26個英文大小寫字母和數字外,只能使用下劃線“__”。14、以下關鍵字不能用來聲明類的訪問權限的是()。A、publicB、staticC、protectedD、private標準答案:B知識點解析:此題考查的是類的訪問權限。在C++語言中,類的訪問權限有公有、保護和私有三種。故本題選B。15、下列關于構造函數的描述中,錯誤的是()。A、構造函數名與類名相同B、構造函數可以有返回值C、構造函數可以重載D、每個類都有構造函數標準答案:B知識點解析:構造函數具有下面4個特殊的性質:構造函數的名字必須與類名相同;構造函數不指定返回類型,它隱含有返回值,由系統(tǒng)內部使用:構造函數可以有一個或多個參數,因此構造函數可以重載;在創(chuàng)建對象時,系統(tǒng)會自動調用構造函數。16、有如下程序段:inti=0,j=1;int&r=i;//①r=j;//②int*p=&i://③*p=&r;//④其中會產生編譯錯誤的語句是()。A、④B、③C、②D、①標準答案:A知識點解析:此題考查的是指針和引用。本題中,語句①是一條合法的引用聲明語句,使得變量i被r引用;語句②通過引用r將變量j的值賦給變量i;語句③聲明了指針變量p,并初始化指向變量i;語句④中*p代表了變量i的值,要將&r賦給*p,這會使編譯器產生類型不符的錯誤提示。17、下列控制對齊方式的操作符中,錯誤的是()。A、internalB、centerC、leftD、right標準答案:B知識點解析:對齊方式的控制操作符1eR的含義是在設定的寬度內左對齊輸出,右端填已設定的填充字符;ri曲t(此為默認設置)在設定的寬度內右對齊輸出;intemal在設定的寬度內右對齊輸出,但若有符號(一或+),符號置于最左端。18、在語句“cout<<’A’:”中,cout是()。A、類名B、對象名C、函數名D、C++的關鍵字標準答案:B知識點解析:C++有四個預定義的流對象:cin標準輸,cout標準輸出,cerr標準出錯信息輸出,clog帶緩沖的標準出錯信息輸出。19、下列關于模板的敘述中,正確的是()。A、如果一個類中存在純虛函數,這個類就是類模板B、函數模板不能有形式參數表C、類模板是一種參數化類型的類,是類的生成器D、類模板中不能包含構造函數標準答案:C知識點解析:對于函數模板,數據類型本身成了它的參數,是一種參數化類型的函數。對于類模板,數據類型本身成了它的參數,因而是一種參數化類型的類,是類的生成器。國家二級C++機試(選擇題)模擬試卷第4套一、選擇題(本題共22題,每題1.0分,共22分。)1、在軟件開發(fā)中,需求分析階段產生的主要文檔是()。A、可行性分析報告B、軟件需求規(guī)格說明書C、概要設計說明書D、集成測試計劃標準答案:B知識點解析:A錯誤,可行性分析階段產生可行性分析報告。c錯誤,概要設計說明書是總體設計階段產生的文檔。D錯誤,集成測試計劃是在概要設計階段編寫的文檔。B正確,軟件需求規(guī)格說明書是后續(xù)工作如設計、編碼等需要的重要參考文檔。2、支持子程序調用的數據結構是()。A、棧B、樹C、隊列D、二叉樹標準答案:A知識點解析:棧是一種限定在一端進行插入與刪除的線性表。在主函數調用子函數時,要首先保存主函數當前的狀態(tài),然后轉去執(zhí)行子函數,把子函數的運行結果返回到主函數調用子函數時的位置,主函數再接著往下執(zhí)行,這種過程符合棧的特點。所以一般采用棧式存儲方式。3、下列關于線性鏈表的敘述中,正確的是()。A、各數據結點的存儲空間可以不連續(xù),但它們的存儲順序與邏輯順序必須一致B、各數據結點的存儲順序與邏輯順序可以不一致,但它們的存儲空間必須連續(xù)C、進行插入與刪除時,不需要移動表中的元素D、以上都不正確標準答案:C知識點解析:線性表的鏈式存儲結構稱為線性鏈表。在鏈式存儲結構中,存儲數據結構的存儲空間可以不連續(xù),各數據結點的存儲順序與數據元素之間的邏輯關系可以不一致,而數據元素之間的邏輯關系是由指針域來確定的。4、某系統(tǒng)總體結構圖如下圖所示:該系統(tǒng)總體結構圖的深度是A、7B、6C、3D、2標準答案:C知識點解析:這個系統(tǒng)總體結構圖是一棵樹結構,在樹結構中,根結點在第1層,同一層上所有子結點都在下一層,由系統(tǒng)總體結構圖可知,這棵樹共3層。在樹結構中,樹的最大層次稱為樹的深度。所以這棵樹的深度為3。5、設樹T的深度為4,其中度為1,2,3,4的結點個數分別為4,2,1,1。則T中的葉子結點數為()。A、8B、7C、6D、5標準答案:B知識點解析:深度為m二叉樹其總結點數為2m-1=24-1=15。總結點數減去度為1,2,3,4的結點個數就是葉子結點數。15-4-2-1-1=7。6、設一棵完全二叉樹共有700個結點,則此二叉樹中的葉子結點數為()。A、85B、120C、250D、350標準答案:D知識點解析:①具有n個結點的完全二叉樹的深度為[long2n]+1,計算出該完全二叉樹的深度為10。②設度為0的結點(即葉子結點)為n0,度為1的結點為n1,度為2的結點為n2,總結點數為n,深度為k。n=n1+n2+n0,由于n0=n2+1則n2=n0-1,故n=n1+n0-1+n0=n1+2n0-1。由于完全二叉樹中度為1的結點數只有兩種可能:0或1。③假設度為1的結點數為0即滿二叉樹,根據滿二叉樹的定義,其2m-1個結點,根據以上計算所得的深度10來計算,應有210-1=1024-1=1023個結點,顯然與題目中700個結點不符。因此,度為1的結點數必然為1。故n=n1+2n0-1=1+2n0-1=2n0,則n0=n/2=700/2=350。7、設一棵樹的度為3,其中沒有度為2的結點,且葉子結點數為5。該樹中度為3的結點數為A、1B、2C、3D、不可能有這樣的樹標準答案:B知識點解析:樹的度是指一棵樹中,最大的結點的度稱為樹的度。本題中樹的度為3,那么樹中最少有一個結點的度為3。而樹中沒有度為2的結點,葉子結點數為5,度為1的結點下面只有一個葉子結點。因此,該樹中含2個度為3的結點滿足題目要求。8、定義無符號整數類為UInt,下面可以作為類UInt實例化值的是()。A、一369B、369C、0.369D、整數集合{1,2,3,4,5}標準答案:B知識點解析:UInt表示的是無符號整數類,所以它的每個實例都是一個無符號整數,所以排除選項A)和選項C),選項D)是整數集合,所以也排除。9、有如下程序:#include<iostream.h>voidmain(){charstr[2][5]={’’1234’’,’’5678’’},*p[2];inti,j,s=0;for(i=0;i<2;i++)p[i]=str[i];for(i=0;i<2;i++)for(j=0;p[i][j]>’\0’;j+=2)s=10*s+p[i][j]-’0’;cout<<s;}該程序的輸出結果是()。A、1357B、2468C、3556D、23678標準答案:A知識點解析:程序中的“for(i=0;i<2;i++)p[i]=str[i];”語句將str中的值賦值給指針數組p。在接下來的二重for循環(huán)中,跳取“j+=2”,p指針指向的值即“1”,“3”,“5”,“7”。在分別對字符到整型的轉換,即減去字符’0’,然后依次轉換為千位,百位,十位,個位“10*s”操作輸出整型s,即“1357”。10、有三個關系R、S和T如下:則由關系R和S得到關系T的操作是()。A、自然連接B、差C、交D、并標準答案:B知識點解析:由三個關系R、S和T的結構可以知道,關系T是由關系R、S經過差運算得到的。11、)有如下程序#includeusingnamespacestd;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;}運行此程序,屏幕上將顯示輸出()。A、B1B2B、A1A2C、B1A2D、A182標準答案:C知識點解析:此題考查的是虛函數的概念。此題中,func1是虛函數,func2是一般成員函數,而且在派生類與基類中都存在兩個這樣的函數。在主函數中,語句A*p=newB;定義了一個基類的指針p,并讓它指向一個派生類對象。所以通過該指針調用func1時,運行的是派生類的版本,而通過該指針調用func2運行的是基類的版本。所以程序運行的最后輸出是:B1A2。12、學校的每個社團都有一名團長,且一個同學可同時擔任多個社團的團長,則實體團長和實體社團間的聯(lián)系是A、一對多B、多對多C、多對一D、一對一標準答案:A知識點解析:一對多關系是關系數據侔中兩個表之間的一種關系,該關系中第一個表中的單個行可以與第二個表中的一個或多個行相關,但第二個表中的一個行只可以與第一個表中的一個行相關。本題中,一個團長可以對應多個社團,一個社團只有一個團長,因此是一對多關系。13、已知函數f的原型是“voidflint*x,int&y);”,變量v1、v2的定義是“intv1,v2;”,下列調用語句中,正確的是()。A、f(v1,v2);B、f(v1,&v2);C、f(&v1,v2);D、f(&v1,&v2);標準答案:C知識點解析:在函數f的形參表達式中第一個形參為整型指針變量,第二個為整型引用變量,所以用實參v1的指針初始化第一個形參,用實參v2初始化第二形參。14、下列關于對象初始化的敘述中,正確的是()。A、定義對象的時候不能對對象進行初始化B、定義對象之后可以顯式地調用構造函數進行初始化C、定義對象時將自動調用構造函數進行初始化D、在一個類中必須顯式地定義構造函數實現初始化標準答案:C知識點解析:建立對象時根據給定的參數調用相應的構造函數對對象進行初始化。無參數時表示調用缺省構造函數。構造函數在對象被創(chuàng)建時由系統(tǒng)自動調用。15、下列程序段中包含4個函數。其中具有隱含this指針的是()。intfunl();classTest{public:intfun2();friendintfun3();staticintfun4();}A、funlB、fun2C、fun3D、fun4標準答案:B知識點解析:this指針是成員函數所屬對象的指針,它指向類對象的地址。成員函數通過這個指針知道自己屬于哪一個對象。this指針是一個隱含的指針,它隱含于每個類的非靜態(tài)成員函數中,它明確的地表示出了成員函數當前操作的數據所屬的對象。16、有如下程序:#include<iostream>usingnamespacestd;classBase{public:voidfun0{tout<<’B’;}};classDerived:publicBase{public:voidfun(){____cout<<’D’;}};intmain(){Derivedd;d.fun();return0;}若程序的輸出結果是BD,則劃線處缺失的部分是()。A、fun();B、Base.fun();C、Base::fun();D、Base->fun();標準答案:C知識點解析:派生類Derived的對象d調用其成員函數fun(),要輸出結果為BD,所以在其成員函數fun()中要調用基類Base的成員函數fun()。17、若AA為一個類,a為該類的非靜態(tài)數據成員,在該類的一個成員函數定義中訪問a時,其書寫格式為()。A、aB、AA.aC、a{}D、AA::a{}標準答案:A知識點解析:類AA的成員函數直接引用類AA的非靜態(tài)數據成員。18、派生類的成員函數不能訪問基類的()。A、公有成員和保護成員B、公有成員C、私有成員D、保護成員標準答案:C知識點解析:此題考查的是派生類對基類成員的訪問。派生類對基類的各個成員的訪問能力與繼承方式無關,其成員不能訪問基類中的私有成員,可以訪問基類的公有成員和保護成員。19、有如下函數模板:temp1ate<typenameT’typenameU>Tcast(Uu){returnu;}其功能是將U類型數據轉換為T類型數據。已知i為int型變量,下列對模板函數cast的調用中正確的是()。A、cast(i),B、cast<>(i);C、cast<char*,int>(i);D、cast<double,int>(i);標準答案:D知識點解析:此題考查的是模板函數的調用。本題中cast()函數的實參i只能確定模板參數U的類型為int,而不能確定另外一個模板參數T,故選項A、B錯誤;C++語言不允許隱式地將int轉化為char*,故選項C錯誤。20、下列關于模板的敘述中,錯誤的是()。A、調用模版函數時,在一定條件下可以省略模板實參B、可以用int、double這樣的類型修飾符來聲明模版參數C、模板聲明中的關鍵字c1ass都可以用關鍵字typename替代D、模板的形參表中可以有多個參數標準答案:C知識點解析:在聲明模板參數是,關鍵字typename和class是可以互換的,兩者是等價的。但選項C中說的是模版聲明,在類模板聲明中,替換可能會引起麻煩。21、若有函數模板mySwap和一些變量定義如下:()。template<classT>voidmySwap(Tx,Ty);doubledl,d2;inti1,12;下列對mySwap的調用中,錯誤的是A、mySwap(i1,i2)B、mySwap(d1,d2)C、mySwap(i1,d1)D、mySwap<int>(i2,d2)標準答案:C知識點解析:按照函數模板mySwap的定義,變量x和y應該是同一類型,而在選項C)的定義中變量il和dl屬于不同的數據類型。22、如下函數的作用是以雙倍行距輸出文件:voiddouble_space(ifstream&f,ofstream&t){charC:whilc(________){;________if(c==’\n’)t.put(c);}}畫線處缺失的部分是()。A、fget(c)與t.put(c)B、f.put(c)與t.get(c)C、t.get(c)與fput(c)D、t.put(c)與f.get(c)標準答案:A知識點解析:此題考查的是文件流。get0函數作用是讀入一個字符,所以調用它的應該是輸入文件流ifstream對象f.pLit0函數作用是輸出一個字符,所以調用它的應該是輸入文件流ofstream對象t,故選項B、C排除;讀入和輸出應該是有順序的,應該先讀入后輸出,所以前一空填f.get(c),后一空填t.put(c)。國家二級C++機試(選擇題)模擬試卷第5套一、選擇題(本題共24題,每題1.0分,共24分。)1、下列關于C++函數的說明中,正確的是()。A、內聯(lián)函數就是定義在另一個函數體內部的函數B、函數體的最后一條語句必須是return語句C、標準C++要求在調用一個函數之前,必須先聲明其原型D、編譯器會根據函數的返回值類型和參數表來區(qū)分函數的不同重載形式標準答案:C知識點解析:一般函數進行調用時,要將程序執(zhí)行權轉到被調用函數中,然后再返回到調用它的函數中;而內聯(lián)函數在調用時,是將調用表達式用內聯(lián)函數體來替換,而不是在定義在另一個函數體內,所以A選項錯誤。函數可以沒有返回值,所以就不需要return了,如果被調函數在調用函數之前已經定義,那么就不需要聲明,所以C選項錯誤,正確選項為D。2、要定義整型數組x,使之包括初值為0的三個元素,下列語句中錯誤的是()。A、intx[3]={0,0,0);B、intx[]={0};C、staticintx[3]={0);D、intx[]={0,0,0);標準答案:B知識點解析:當數組聲明時沒有給出數組的大小,但是有初始化列表時,數組的大小就由列表中元素的個數來確定。對于選項B定義數組x時,沒有給出數組的大小,初始化時只給出了一個元素0。所以數組x只包含一個元素為0的元素。3、有如下程序#include#includeusingnamespacestd;classMyClass{public:MyClass(){cout<<’A’;}MyClass(charc){cout<*p2;p2=newMyClass(’X’);deletep2;return();}執(zhí)行這個程序屏幕上將顯示輸出()。A、ABXB、ABXBC、AXBD、AXBB標準答案:D知識點解析:此題考查的是構造函數和析構函數。構造函數在對象被創(chuàng)建的時候由系統(tǒng)自動調用,而析構函數在對象的生存期即將結束的時候由系統(tǒng)自動調用。此題中,主程序在創(chuàng)建MayClass類的對象p1時,調用MayClass類的默認構造函數,輸出字母A:然后在創(chuàng)建*p2對象時,調用帶字母參數的構造函數,輸出字母x;語句deletep2:調用析構函數,輸出字母B;在主函數退出時,調用析構函數清除對象p1,輸出字母B。4、下列描述中,正確的是()。A、線性鏈表是線性表的鏈式存儲結構B、棧與隊列是非線性結構C、雙向鏈表是非線性結構D、只有根結點的二叉樹是線性結構標準答案:A知識點解析:根據數據結構中各數據元素之間前后關系的復雜程度,一般將數據結構分為兩大類型:線性結構與非線性結構。如果一個非空的數據結構滿足,下列兩個條件:①有且只有一個根結點:②每個結點最多有一個前件,也最多有一個后件。則稱該數據結構為線性結構,又稱線性表。所以線性表、棧與隊列、線性鏈表都是線性結構,而二叉樹是非線性結構。5、下列描述中正確的是A、軟件測試應該由程序開發(fā)者來完成B、程序經調試后一般不需要再測試C、軟件維護只包括對程序代碼的維護D、以上三種說法都不對標準答案:D知識點解析:為了達到好的測試效果,應該由獨立的第三方進行測試工作。因為從心理學角度講,程序人員或設計方在測試自己的程序時,要采取客觀的態(tài)度是會不同程度地存在障礙的,所以選項A)錯誤。在程序調試時,修改了一個錯誤的同時可能引入了新的錯誤,解決的辦法是在修改了錯誤之后,必須進行回歸測試,所以選項B)錯誤。所謂軟件維護,就是將交付的軟件投入運行,并在運行使用中不斷地維護,根據新提出的需求進行必要而且可能的擴充和刪改,所以選項C)錯誤。6、下列程序的輸出結果是()。#include<iostream>usingnamespacestd;template<typenameT>Tfun(Ta,Tb){return(a>=b)?a:b;}voidmain(){cout<<fun(3,6)<<’,’<<fun(3.14F,6.28F)<<end1;}A、6,3.14B、3,6.28C、3,3.14.D、6,6.28標準答案:D知識點解析:“?:”為條件運算符,(a>=b)?a:b是當a大于b時取a,否則取b。所以第一個fun(3,6)調用中,6大于3,所以輸出6,同理第二個fun(3.14F,6.28F)調用中輸出6.28。7、字符串“a+b=12\n\t”的長度為()。A、12B、10C、8D、6標準答案:C知識點解析:題目給出的字符串含有7個字符,再加字符串的結束字符,所以共8個字符。8、有如下定義:inta[5]={1,3,5,7,9},*p=a;下列表達式中不能得到數值5的是()。A、a[2]B、a[3]C、*(p+2)D、*p+4標準答案:B知識點解析:此題考查的是指針引用數組元素。B選項中,a[3]是數組的第四個元素,即7;其它選項的引用均可得到5。9、下列有關內聯(lián)函數的敘述中,正確的是()。A、內聯(lián)函數在調用時發(fā)生控制轉移B、內聯(lián)函數必須通過關鍵字inline來定義C、內聯(lián)函數是通過編譯器來實現的D、內聯(lián)函數函數體的最后一條語句必須是return語句標準答案:C知識點解析:此題考查的是內聯(lián)函數的概念。在調用時,內聯(lián)函數會像宏函數一樣的展開,將調用表達式用內聯(lián)函數體來替換所以它沒有一般函數的參數壓棧和和退棧操作,所以選項A錯誤;即使沒有使用inline說明,編譯器也會將在類的說明部分定義的函數認定為內聯(lián)函數,所以選項B錯誤;內聯(lián)函數只是比普通函數有更高的執(zhí)行效率,所以選項D錯誤。10、有如下程序:#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;}intGetb0{returnb;}};intmain(){char*p1=’’abcd’’,*p2=’’weirong’’;intd1=6,d2=8;XCDx(p1,d1),y(p2,d2);cout<<strlen(x.Geta())+y.Getb()<<end1;return0;}運行時的輸出結果是()。A、12B、16C、14D、11標準答案:A知識點解析:由類XCD的定義可知,成員函數Geta()返回的是字符串的長度,Getb()返回的是參數b的值。在主函數中strlen(x.Geta())的值等于4,y.Getb()的值等于8,所以輸出兩者的和為12。11、下列類模板的定義中語法格式錯誤的是()。A、template<classT>classBuffer{/*…*/}B、template<typenameT>classBuffer{/*…*/};C、template<classT1,classT2>classBuffer{/*…*/};D、template<T>classBuffer{/*…*/};標準答案:D知識點解析:定義類模板的一般形式是:template<類型名參數名1,類型名參數名2,…>class類名{類聲明體};模板的類型參數由關鍵字class或關鍵字typename及其后的標識符構成。在模板參數表中關鍵字class和typename的意義相同。12、若已定義了類Vehicle,則下列派生類定義中,錯誤的是()。A、classCar:vehicle{/*類體略*/};B、classCar:publiccar{/*類體略*/};C、classCar:publicVehicle{/*類體略*/};D、classCar:virtualpublicVehicle{/*類體略*/};標準答案:B知識點解析:類Car不能派生自它奉身。13、有如下兩個類定義classxx{private:dOublex1;protected:doublex2;public:doublex3;};classYY:protectedXX{private:doubley1;potected:doubley2;public:doubley3;};在類YY中保護成員變量的個數是()。A、1B、2C、3D、4標準答案:C知識點解析:在C++中派生類從基類保護繼承時,基類的公有成員在派生類中改變?yōu)楸Wo成員,基類的保護成員在派生類中仍為保護成員。所以對于本題來說,YY類保護繼承自類XX,那么類XX中的公有成員x3和保護成員x2在派生類中都成為保護成員,再加上類YY。中的保護成員y2,因此在派生類YY中保護成員的個數為3。14、建立一個有成員對象的派生類對象時,各構造函數體的執(zhí)行次序為()。A、派生類、成員對象類、基類B、成員對象類、基類、派生類C、基類、成員對象類、派生類D、基類、派生類、成員對象類標準答案:C知識點解析:建立派生類對象的時候,構造函數的執(zhí)行順序如下:執(zhí)行基類的構造函數,調用的順序按照基類被繼承時候的順序(自左向右)。然后是執(zhí)行成員對象的構造函數,調用順序按照各個成員對象在類中的聲明順序(自上而下),最后是執(zhí)行派生類的構造函數。15、當派生類從一個基類保護繼承時,基類中的一些成員在派生類中成為保護成員,這些成員在基類中原有的訪問屬性是()。A、任何B、公有或保護C、保護或私有D、私有標準答案:B知識點解析:基類的公有成員和保護成員只有在以保護繼承方式繼承時,其在繼承類中是保護成員。16、有如下程序:#include<iostream>usingnarnespacestd;classMountain{intheight;public:Mountain(inth=0):height(h){}virtualchar*GetName()const{return"山";}intGetHeight()const{returnheight;}};classLushan:publicMountain{Publie:Lushan(intd):Mountain(d){}Char*GetName()const{return"廬山";}};intmain(){Mountain*p=newLushan(1000);cout<<p->GetName()<<"海拔"<<p->GetHeight()<<"米";return0;}運行這個程序的輸出結果是()。A、廬山海拔1000米B、廬山海拔0米C、山海拔1000米D、山海拔0米標準答案:A知識點解析:在基類Mountain中定義了虛函數GotName()輸出字符串“山”,而在派生類Lushan中對虛函數GetName()進行了重新定義,輸出字符串“廬山”。在主函數中對派生類中的虛函數GetName()進行了多態(tài)調用,此時調用的是派生類中重新定義的GetName(),輸出字符字符串“廬山”。17、有如下程序:#include<iostream>usingnamespacestd;classToy{public:Toy(char*_n){strcpy(name,_n);count++;}~TOYO{count--;}char*GetName(){retBtnname;}staticintgetCount(){returncount;}private;charname[10];staticintcount;};intToy::count=0;intmain(){Toyt1(’’Snoopy’’),t2(’’Mickey’’),t3(’’Barbie’’);cout<<t1.getCount()<<end1;return0;}運行時的輸出結果是()。A、1B、2C、3D、運行時出錯標準答案:C知識點解析:類Toy中包含一個字符數組name和一個靜態(tài)整型變量count。在程序中首先給類Toy的成員count的賦初始值0,然后在主函數中,定義了三個Toy對象t1、t2、t3,并分別對它們的name字段賦值,在賦值的同時變量count的值加l,所以最后變量count的值等于3。18、有如下程序:#inc1ude<iostream>usingnamespacestd;classMountain{intheight;public:Mountain(inth=0):height(h){}virtualchar*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;}運行這個程序的輸出結果是()。A、廬山海拔1000米B、廬山海拔0米C、山海拔1000米D、山海拔0米標準答案:A知識點解析:在基類Mountain中定義了虛函數GetName()輸出字符串“山”,而在派生類Lushan中對虛函數GetName()進行了重新定義,輸出字符串“廬山”。在主函數中對派生類中的虛函數GetName()進行了多態(tài)調用,此時調用的是派生類中重新定義的GetName(),輸出字符字符串“廬山”。19、有如下程序:#includeusmgnam

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論