C++填空選擇題_第1頁
C++填空選擇題_第2頁
C++填空選擇題_第3頁
C++填空選擇題_第4頁
C++填空選擇題_第5頁
已閱讀5頁,還剩36頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、C+程序設計模擬試卷(一)一、單項選擇題1. 編寫C+程序一般需經過的幾個步驟依次是()A. 編輯、調試、編譯、連接B. 編輯、編譯、連接、運行C. 編譯、調試、編輯、連接D. 編譯、編輯、連接、運行答案:B解析:(P21)經過編輯、編譯、連接和運行四個步驟。編輯是將C+源程序輸入計算機的過程,保存文件名為cpp。編譯是使用系統提供的編譯器將源程序cpp生成機器語言的過程,目標文件為obj,由于沒有得到系統分配的絕對地址,還不能直接運行。連接是將目標文件obj轉換為可執行程序的過程,結果為exe。運行是執行exe,在屏幕上顯示結果的過程。2. 決定C+語言中函數的返回值類型的是()A. ret

2、urn語句中的表達式類型B. 調用該函數時系統隨機產生的類型C. 調用該函數時的主調用函數類型D. 在定義該函數時所指定的數據類型答案:D解析:(P51)函數的返回值類型由定義函數時的指定的數據類型決定的。A項的表達式的值要轉換成函數的定義時的返回類型。3. 下面敘述不正確的是()A. 派生類一般都用公有派生B. 對基類成員的訪問必須是無二義性的C. 賦值兼容規則也適用于多重繼承的組合D. 基類的公有成員在派生類中仍然是公有的答案:D解析:(P136)繼承方式有三種:公有、私有和保護。多繼承中,多個基類具有同名成員,在它們的子類中訪問這些成員,就產生了二義性,但進行訪問時,不能存在二義性。賦值

3、兼容規則是指派生類對象可以當作基類對象使用,只要存在繼承關系,所以單繼承或多繼承都適用。基類中的公有成員采用私有繼承時,在派生類中變成了私有成員,所以D項錯誤。4. 所謂數據封裝就是將一組數據和與這組數據有關操作組裝在一起,形成一個實體,這實體也就是()A. 類B. 對象C. 函數體D. 數據塊答案:A解析:(P39)類即數據和操作的組合體,數據是類的靜態特征,操作是類具有的動作。5. 在公有派生類的成員函數不能直接訪問基類中繼承來的某個成員,則該成員一定是基類中的()A. 私有成員B. 公有成員C. 保護成員D. 保護成員或私有成員答案:A解析:(P133)在派生類中基類的保護或者基類公有都

4、可以直接訪問,基類的私有成員只能是基類的成員函數來訪問。所以選擇A項。6. 對基類和派生類的關系描述中,錯誤的是()A. 派生類是基類的具體化B. 基類繼承了派生類的屬性C. 派生類是基類定義的延續D. 派生類是基類的特殊化答案:B解析:(P129)派生類的成員一個是來自基類,一個來自本身,所以派生類是基類的擴展,也是基類的具體化和特殊化,派生類是對基類擴展。B項基類不能繼承派生類成員,所以錯誤。7. 關于this指針使用說法正確的是()A. 保證每個對象擁有自己的數據成員,但共享處理這些數據的代碼B. 保證基類私有成員在子類中可以被訪問。C. 保證基類保護成員在子類中可以被訪問。D. 保證基

5、類公有成員在子類中可以被訪問。答案:A解析:(P86)this指針是隱藏的,可以使用該指針來訪問調用對象中的數據。基類的成員在派生類中能否訪問,與繼承方式有關,與this沒有關系。所以選擇A項。8. 所謂多態性是指 ()A. 不同的對象調用不同名稱的函數B. 不同的對象調用相同名稱的函數C. 一個對象調用不同名稱的函數D. 一個對象調用不同名稱的對象答案:B解析:(P167)多態性有兩種靜態多態性和動態多態性,靜態多態性是指調用同名函數,由于參數的不同調用不同的同名函數;動態多態性是指不同對象調用同名函數時,由于對象不同調用不同的同名函數。 多態性肯定具有相同的函數名,所以選擇B項。9. 一個

6、函數功能不太復雜,但要求被頻繁調用,則應把它定義為 ()A. 內聯函數B. 重載函數C. 遞歸函數D. 嵌套函數答案:A解析:(P59)內聯函數特征代碼少,頻繁調用,執行效率高。重載函數解決統一接口的問題;遞歸是子程序調用,程序調用要耗費很多空間和時間,循環/迭代都比遞歸有效率得多,遞歸只是從形式上,邏輯比較簡潔。嵌套函數即反復調用,速度較慢。所以選擇A項。10. 下面函數模板定義中不正確的是()A. AB. BC. CD. D答案:A解析:(P147)A項中F是一個返回Q類型的值,而return中用返回類型作為返回值錯誤。所以選擇A項。11. 假設ClassY:publicX,即類Y是類X的

7、派生類,則說明一個Y類的對象時和刪除Y類對象時,調用構造函數和析構函數的次序分別為()A. X,Y;Y,XB. X,Y;X,YC. Y,X;X,YD. Y,X;Y,X答案:A解析:(P130)派生類構造函數必須對這三類成員進行初始化,其執行順序:調用基類構造函數;調用子對象的構造函數;派生類的構造函數體。析構函數在執行過程中也要對基類和成員對象進行操作,但它的執行過程與構造函數正好相反,即對派生類新增普通成員進行清理;調用成員對象析構函數,對派生類新增的成員對象進行清理;調用基類析構函數,對基類進行清理,所以選擇A項。12. 適宜采用inline定義函數情況是()A. 函數體含有循環語句B.

8、函數體含有遞歸語句C. 函數代碼少、頻繁調用D. 函數代碼多、不常調用答案:C解析:(P59)內聯函數具有程序代碼少、頻繁調用和執行效率高的特征,所以選擇C項。13. 假定一個類的構造函數為A(int aa,int bb) a=aa-;b=a*bb;,則執行A x(4,5);語句后,x.a和x.b的值分別為()A. 3和15B. 5和4C. 4和20D. 20和5答案:C解析:(P75)a=4,因為后減,b的值與a、bb相關,b4*5=20,而與aa沒有任何關系。14. 在類中說明的成員可以使用關鍵字的是()A. publicB. externC. cpuD. register答案:A解析:e

9、xtern用于聲明外部變量的。register聲明寄存器類型變量。無cpu類型。它們都不能聲明類成員。public聲明為公有訪問權限,所以選擇A項。15. 下列不能作為類的成員的是()A. 自身類對象的指針B. 自身類對象C. 自身類對象的引用D. 另一個類的對象答案:B解析:類的定義,如果有自身類對象,使得循環定義,B項錯誤。在類中具有自身類的指針,可以實現鏈表的操作,當然也可以使用對象的引用。類中可以有另一個類的對象,即成員對象。所以選擇B選項。16. 使用地址作為實參傳給形參,下列說法正確的是()A. 實參是形參的備份B. 實參與形參無聯系C. 形參是實參的備份D. 實參與形參是同一對象

10、答案:D解析:(P51)地址作為實參,表示實參與形參代表同一個對象。如果實參是數值,形參也是普通變量,此時形參是實參的備份。所以選擇D項。17. 下列程序的輸出結果是()#include void main()int n3=10,20,30,40,50,60;int (*p)3;p=n;coutp00,*(p0+1),(*p)2endl;A. 10,30,50B. 10,20,30C. 20,40,60D. 10,30,60答案:B解析:如果數組元素都是相同類型的指針,則稱這個數組為指針數組。指針數組一般用于處理二維數組。聲明的格式為:。p表示指向數組n的行指針。如果將指針的初始化(*p)3=

11、b;地址的等價形式:p+i pi*(p+i)都表示b數組第i+1行的第1個元素的首地址。*(p+i)+jpi+j &pij都表示b數組第i+1行、第j+1列元素的地址。值的等價形式:*(*(p+i)+j) *(pi+j) pij都表示b數組第i+1、第j+1列元素的值。所以題目分別訪問p00,p01,p02。18. 在C+中,使用流進行輸入輸出,其中用于屏幕輸入()A. cinB. cerrC. coutD. clog答案:A解析:(P193)(1)標準輸入流cin:istream類的對象。(2)標準輸出流cout:ostream類的對象。(3)非緩沖型標準出錯流cerr:ostream類的對

12、象。(4)緩沖型標準出錯流clog:ostream類的對象19. 假定AA為一個類,a()為該類公有的函數成員,x為該類的一個對象,則訪問x對象中函數成員a()的格式為()A. x.aB. x.a()C. x-aD. (*x).a()答案:B解析:(P41)對象訪問成員的方式為:對象名.成員。指針可以有兩種:(*對象指針).成員或者對象指針-成員。A選項是訪問數據成員,B項是訪問成員函數。20. 關于對象概念的描述中,說法錯誤的是()A. 對象就是C語言中的結構變量B. 對象代表著正在創建的系統中的一個實體C. 對象是類的一個變量D. 對象之間的信息傳遞是通過消息進行的答案:A解析:(P37)

13、A對象在C中才有,包括數據和操作兩項,而C中的變量只有數據,沒有操作。所以A項錯誤。二、填空題1. C+的流庫預定義了4個流,它們是cin、cout、clog和_。答案:(P193)cerr解析cin、cout、clog和cerr分別用于標準輸入、輸出、標準錯誤流(緩沖)和標準錯誤流(非緩沖)。2. 每個對象都是所屬類的一個_。答案:(P69)實例解析類是對象的抽象,對象是類的一個實例。3. 在已經定義了整型指針ip后,為了得到一個包括10個整數的數組并由ip所指向,應使用語句_。答案:(P78)int *ip=new int10;解析new用來動態開辟空間。常用來產生動態數組及對象構造函數。

14、4. 函數模板中緊隨template之后尖括號內的類型參數都要冠以保留字_。答案:(P145)class解析類模板的使用。template ,也可以引入多參數的如:template 5. 定義類的動態對象數組時,系統只能夠自動調用該類的_構造函數對其進行初始化。答案:(P80)無參解析使用new創建對象數組,調用無參構造函數。6. 表達式cout解析指針使用成員有兩種方法:“-”指向運算符和“.”成員訪問運算符。8. 假如一個類的名稱為MyClass,使用這個類的一個對象初始化該類的另一個對象時,可以調用_構造函數來完成此功能。答案:(P80)復制或拷貝復制或拷貝構造函數就是用對象初始化新的對

15、象。9. 對賦值運算符進行重載時,應聲明為_函數。答案:(P183)類成員解析運算符重載的方法有友元或者成員函數兩種途徑,但是賦值運算符只能使用成員函數的方法來實現。10. 如果要把A類成員函數f()且返回值為void聲明為類B的友元函數,則應在類B的定義中加入的語句_。答案:(P109)friend void A:f();解析成員函數作為另一個類的友元函數,格式為:friend 返回類型 類名:函數(形參)。11. 下列程序段的輸出結果是_。for(i=0,j=10,k=0;i=j;i+,j-=3,k=i+j);coutk;答案:4解析for循環結構,三個表達式的作用,初始化、循環判斷條件和

16、循環變量變化。循環執行了三次,k的作用是計算i、j的和。12. String 類的_方法返回查找到的字符串在主串的位置。答案:(P40)find解析string類對象方法的find,查不到字符串,則返回-1。13. int n=0;while(n=1)n+;while循環執行次數是_。答案:無限次解析是賦值運算符,不是關系運算符,且不等0,所以死循環。14. 控制格式輸入輸出的操作中,函數_是用來設置填充字符。要求給出函數名和參數類型答案:(P195)setfill(char)解析格式控制方法的使用,如setw,setfill等等。15. C+語言支持的兩種多態性分別是編譯時的多態性和_的多態

17、性。答案:(P167)運行時解析多態性包括靜態的(編譯時)多態性和動態的(運行時)多態性。16. 設函數sum是由函數模板實現的,并且sum(3,6)和sum(4.6,8)都是正確的函數調用,則函數模板具有_個類型參數。答案:(P61)217. 執行下列代碼string str(HelloC+);coutstr.substr(5,3);程序的輸出結果是_。答案:(P42)C+解析substr取子字符串,第1個參數表示要截取子串在字符串中的位置,第2個表示取多少個字符。18. 在面向對象的程序設計中,將一組對象的共同特性抽象出來形成_。答案:(P38)類解析類是相似特征的對象的抽象,對象是類的一

18、個實例。19. 定義類動態對象數組時,元素只能靠自動調用該類的_來進行初始化。答案:(P77)無參構造函數解析使用new 創建動態對象數組,不能有參數,所以只能調用無參的構造函數,初始化對象20. 已知有20個元素int類型向量V1,若用V1初始化為V2向量,語句是_。答案:(P151)ector V2(V1);解析采用向量初始化另一個向量的形式:vector name1(name);一、單項選擇題1. 靜態成員函數沒有()A. 返回值B. this指針C. 指針參數D. 返回類型答案:B解析:(P107)靜態成員函數是普通的函數前加入static,它具有函數的所有的特征:返回類型、形參,所以

19、使用(P107)靜態成員函數,指針可以作為形參,也具有返回值。靜態成員是類具有的屬性,不是對象的特征,而this表示的是隱藏的對象的指針,因此靜態成員函數沒有this 指針。靜態成員函數當在類外定義時,要注意不能使用static關鍵字作為前綴。由于靜態成員函數在類中只有一個拷貝(副本),因此它訪問對象的成員時要受到一些限制:靜態成員函數可以直接訪問類中說明的靜態成員,但不能直接訪問類中說明的非靜態成員;若要訪問非靜態成員時,必須通過參數傳遞的方式得到相應的對象,再通過對象來訪問。2. 假定AB為一個類,則執行“AB a(2), b3,*p4;”語句時調用該類構造函數的次數為()A. 3B. 4

20、C. 5D. 9答案:B解析:(P79)a(2)調用1次帶參數的構造函數,b3調用3次無參數的構造函數,指針沒有給它分配空間,沒有調用構造函數。所以共調用構造函數的次數為4。3. 有關多態性說法不正確的是()A. C+語言的多態性分為編譯時的多態性和運行時的多態性B. 編譯時的多態性可通過函數重載實現C. 運行時的多態性可通過模板和虛函數實現D. 實現運行時多態性的機制稱為動態多態性答案:C解析:(P171)多態性分為靜態的和動態的。靜態通過函數的重載來實現,動態是通過基類指針或基類引用和虛函數來實現的。所以錯誤的是C項。4. 假定一個類的構造函數為“A(int i=4, int j=0) a

21、=i;b=j;”, 則執行“A x (1);”語句后,x.a和x.b的值分別為()A. 1和0B. 1和4C. 4和0D. 4和1答案:A解析:(P75)帶默認的構造函數,對應實參沒有值時就采用形參值。調用構造函數時,i=1,不采用默認值,而只有一個參數,j采用默認值0即j=0,因此a=1,b=0,選擇A項。5. 類MyA的拷貝初始化構造函數是 ()A. MyA()B. MyA(MyA*)C. MyA(MyA&)D. MyA(MyA)答案:C解析:(P80)復制即拷貝構造函數使用對象的引用作形參,防止臨時產生一個對象,A無參構造函數,B是指針作為形參,D項是對象,所以選擇C項。6. 在C+中,

22、函數原型不能標識()A. 函數的返回類型B. 函數參數的個數C. 函數參數類型D. 函數的功能答案:D解析:函數的聲明,說明函數的參數、返回類型以及函數名,函數體即實現部分決定功能。所以函數的原型不能決定函數的功能。7. 友元關系不能()A. 提高程序的運行效率B. 是類與類的關系C. 是一個類的成員函數與另一個類的關系D. 繼承答案:D解析:(P111)友元可以是函數與類的關系即友元函數,也可以類與類的關系即友元類,但友元不能繼承,是單向性,且不具有傳遞性。友元可以訪問類中所有成員,提高了訪問的方便性。因此選擇D項。8. 實現兩個相同類型數加法的函數模板的聲明是()A. add(T x,T

23、y)B. T add(x,y)C. T add(T x,y)D. T add(T x,T y)答案:D解析:(P63)實現兩個相同類型數加法結果應該和操作數具有相同類型。進行加法運算后結果也是和參數具有相同類型,需要返回值。A無返回值時要用void,B形參無類型,C形參y沒有類型,所以選擇D項。9. 在int a=3,int *p=&a;中,*p的值是()A. 變量a的地址值B. 無意義C. 變量p的地址值D. 3答案:D解析:*p代表引用a變量的值,p代表a的地址值。所以選擇D項。10. 下列不是描述類的成員函數的是()A. 構造函數B. 析構函數C. 友元函數D. 拷貝構造函數答案:C解析

24、:(P109)構造函數、析構函數、拷貝構造函數都是特殊的成員函數,友元則不是成員函數。所以選擇C項。11. 如果從原有類定義新類可以實現的是()A. 信息隱藏B. 數據封裝C. 繼承機制D. 數據抽象答案:C解析:(P129)繼承指在原有類的基礎上產生新類。數據封裝即數據和操作組合在一起,形成類。信息的隱藏,通過訪問權限來實現。數據抽象,將事物的特征抽象為數據成員或服務。因此選擇C項。12. 下面有關類說法不正確的是()A. 一個類可以有多個構造函數B. 一個類只有一個析構函數C. 析構函數需要指定參數D. 在一個類中可以說明具有類類型的數據成員答案:C解析:(P80)構造函數可以有參數、可以

25、重載、因此可以有多個,A項正確。析構函數只有一個不能重載、不能繼承,沒有返回值,B項正確,C項錯誤。13. 在函數定義中的形參屬于()A. 全局變量B. 局部變量C. 靜態變量D. 寄存器變量答案:B解析:形參或函數中定義的變量都是局部變量。在函數外定義的變量是全局變量。形參只能用局部變量,頻繁使用的變量可以聲明為寄存器變量,形參不能使用靜態變量或寄存器變量。14. 下列有關重載函數的說法中正確的是()A. 重載函數必須具有不同的返回值類型B. 重載函數參數個數必須相同C. 重載函數必須有不同的形參列表D. 重載函數名可以不同答案:C解析:(P59)函數的重載必須函數名相同而形參類型或個數不同

26、,與返回值無關。15. this指針存在的目的是()A. 保證基類私有成員在子類中可以被訪問B. 保證基類保護成員在子類中可以被訪問C. 保證每個對象擁有自己的數據成員,但共享處理這些數據成員的代碼D. 保證基類公有成員在子類中可以被訪問答案:C解析:(P86)C+要求函數在被調用之前,應當讓編譯器知道該函數的原型,以便編譯器利用函數原型提供的信息去檢查調用的合法性,強制參數轉換成為適當類型,保證參數的正確傳遞。對于標準庫函數,其聲明在頭文件中,可以用#include宏命令包含這些原型文件;對于用戶自定義函數,先定義、后調用的函數可以不用聲明,但后定義、先調用的函數必須聲明。一般為增加程序的可

27、理解性,常將主函數放在程序開頭,這樣需要在主函數前對其所調用的函數一一進行聲明,以消除函數所在位置的影響。所以選擇C項。16. 關于new運算符的下列描述中,錯誤的是()A. 它可以用來動態創建對象和對象數組B. 使用它創建的對象或對象數組可以使用運算符delete刪除C. 使用它創建對象時要調用構造函數D. 使用它創建對象數組時必須指定初始值答案:D解析:(P78)new創建的對象數組不能指定初始值,所以調用無參的構造函數,選擇D項。17. 已知:p是一個指向類A數據成員m的指針,A1是類A的一個對象。如果要給m賦值為5,正確的是()A. A1.p=5;B. A1-p=5;C. A1.*p=

28、5;D. *A1.p=5;答案:C解析:(P118)A中p是指針即地址,錯誤;B選項中A1不是指針不能使用指向運算符-,錯誤;“*”比“.”級別要高,所以D選項*A1.p=5相當于(*A1).p=5;錯誤。另外涉及到指向成員函數時注意以下幾點:指向成員函數的指針必須于其賦值的函數類型匹配的三個方面:(1)參數類型和個數;(2)返回類型;(3)它所屬的類類型。成員函數指針的聲明:指向short型的Screen類的成員的指針定義如下: short Screen:* ps_Screen;ps_Screen可以用_height的地址初始化如下:short Screen:*ps_Screen=&Scre

29、en:_height;類成員的指針必須總是通過特定的對象或指向改類型的對象的指針來訪問。是通過使用兩個指向成員操作符的指針(針對類對象和引用的.*,以及針對指向類對象的指針的-*)。18. 以下基類中的成員函數表示純虛函數的是()A. virtual void tt()=0B. void tt(int)=0C. virtual void tt(int)D. virtual void tt(int)答案:A解析:(P173)當在基類中不能為虛函數給出一個有意義的實現時,可以將其聲明為純虛函數,實現由派生類完成。格式:virtual()=0;。19. C+類體系中,不能被派生類繼承的有()A. 常

30、成員函數B. 構造函數C. 虛函數D. 靜態成員函數答案:B解析:(P132)構造函數不能被繼承。20. 靜態成員函數不能說明為()A. 整型函數B. 浮點函數C. 虛函數D. 字符型函數答案:C解析:(P108)使用關鍵字static聲明的成員函數就是靜態成員函數,靜態成員函數也屬于整個類而不屬于類中的某個對象,它是該類的所有對象共享的成員函數。靜態成員函數可以在類體內定義,也可以在類外定義。當在類外定義時,要注意不能使用static關鍵字作為前綴。由于靜態成員函數在類中只有一個拷貝(副本),因此它訪問對象的成員時要受到一些限制:靜態成員函數可以直接訪問類中說明的靜態成員,但不能直接訪問類中

31、說明的非靜態成員;若要訪問非靜態成員時,必須通過參數傳遞的方式得到相應的對象,再通過對象來訪問。虛函數是非靜態的、非內聯的成員函數。靜態成員函數不能被說明為虛函數。二、填空題1. 假設int a=1,b=2;則表達式(+a/b)*b-的值為_。答案:2解析前綴或表示先使變量值變化,再使用,這和后綴恰恰相反。但是編譯cout(+a/b)*b-時,先+a/b值為1,后1*b-,先取b2,結果為2,再讓b1。2. 抽象類中至少要有一個_函數。答案:(P173)純虛解析至少有一個純虛函數的類就稱為抽象類,即不能實例化。3. 一個抽象類的派生類可以實例化的必要條件是實現了所有的_。答案:(P173)純虛

32、函數的定義解析抽象類只因有純虛函數,所以不能被實例化,所以派生類要實例化必須對純虛函數進行定義。4. 下面程序的輸出結果為_。#include void main()int num=2,i=6;doi-;num+;while(-i);coutnumendl;答案:5解析dowhile循環,前綴先使i減少1后判斷是否為零,不為零時再次執行循環,為零退出循環。循環值執行3次就退出,所以結果為5。5. 靜態成員函數、友元函數、構造函數和析構函數中,不屬于成員函數的是_。答案:(P109)友元函數解析友元函數不是類成員,但可以訪問類成員。類的封裝性保證了數據的安全,但引入友元,雖然訪問類是方便了,但確

33、實破壞類訪問的安全性。6. 在用C進行程序設計時,最好用_代替malloc。答案:(P10)new解析new與delete是C+語言特有的運算符,用于動態分配和釋放內存。new用于為各種數據類型分配內存,并把分配到的內存首地址賦給相應的指針。new的功能類似于malloc()函數。使用new的格式為:new;其中,可以是基本數據類型,也可以是由基本類型派生出來的類型;取得分配到的內存首地址。new有3種使用形式。(1)給單個對象申請分配內存int *ip;ip=new int;/ip指向1個未初始化的int型對象(2)給單個對象申請分配內存的同時初始化該對象int *ip;ip=new int

34、(68);/ip指向1個表示為68的int型對象(3)同時給多個對象申請分配內存int *ip;ip=new int5;/ip指向5個未初始化的int型對象的首地址for(int i=0;i5;i+)ipi=5*i+1;/給ip指向的5個對象賦值用new申請分配內存時,不一定能申請成功。若申請失敗,則返回NULL,即空指針。因此,在程序中可以通過判斷new的返回值是否為0來獲知系統中是否有足夠的空間供用戶使用。7. 由const修飾的對象稱為_。答案:(P113)常對象解析使用const關鍵字說明的成員函數稱為常成員函數,使用const關鍵字說明的對象稱為常對象。常成員函數的說明格式如下:()

35、const;常成員函數不更新對象的數據成員,也不能調用該類中沒有用const修飾的成員函數。常對象只能調用它的常成員函數,而不能調用其他成員函數。const關鍵字可以用于參與重載函數的區分。8. 在C+程序設計中,建立繼承關系倒掛的樹應使用_繼承。答案:(P138)單解析一個基類可以派生多個子類,一個子類可以再派生出多個子類,這樣就形成了一個倒立的樹。9. 基類的公有成員在派生類中的訪問權限由_決定。答案:(P132)訪問控制方式或繼承方式10. 不同對象可以調用相同名稱的函數,但執行完全不同行為的現象稱為_。答案:(P167)多態性解析多態性的概念。虛函數是實現多態的基礎,運行過程中的多態需

36、要同時滿足3個條件:(1)類之間應滿足子類型關系。(2)必須要有聲明的虛函數。(3)調用虛函數操作的是指向對象的指針或者對象引用;或者是由成員函數調用虛函數(如果是在構造函數或析構函數中調用虛函數,則采用靜態聯編)。11. this指針始終指向調用成員函數的_。答案:對象this指針是隱藏的指針,它指向調用函數的對象。12. 預處理命令以_符號開頭。答案:(P183)operater解析文件包含、預處理和編譯都是以開頭。13. 類模板用來表達具有_的模板類對象集。答案:(P145)相同處理方法解析模板特點是不同的數據具有相同的處理方法的抽象。14. C+程序的源文件擴展名為_。答案:(P21)

37、cpp解析源程序*.cpp,目標文件為*.obj,可執行程序*.exe。15. 在#include命令中所包含的頭文件,可以是系統定義的頭文件,也可以是_的頭文件。答案:(P7)自定義解析include裝入文件有兩種方式和“”,一是系統的,一是自定義文件。16. vector類中向向量尾部插入一個對象的方法是_。答案:(P157)push_back17. C+語言中如果調用函數時,需要改變實參或者返回多個值,應該采取_方式。答案:(P51)傳地址或引用解析傳地址即指針,在函數中通過指針修改它指向的變量的值時,實參也就變化了。使用引用,直接修改變量的別名即引用的值,該變量也就隨著變化。18. 語

38、句序列ifstream infile;infile.open(“data.dat”);的功能可用一個語句實現,這個語句是_。答案:(P199)ifstream infile(“data.dat”);解析void ifstream:open(const char *fname,int mode=ios:in,intaccess=filebuf:openprot);ifstream:ifstream(const char *fname,int mode=ios:in,int access=filebuf:openprot);其中,第一個參數是用來傳遞文件名的;第二個參數mode的值決定文件將如何被

39、打開;第三個參數access的值決定文件的訪問方式,一般取缺省值filebuf:openprot,表示是普通文件。mode的取值如下:(1)ios:in:打開一個文件進行讀操作,而且該文件必須已經存在;(2)ios:nocreate:不建立新的文件。當文件不存在時,導致open()失敗;(3)ios:noreplace:不修改原來已經存在的文件。若文件已經存在,導致open()失敗;(4)ios:binary:文件以二進制方式打開,缺省時為文本文件。19. 如果要把類B的成員函數void fun()說明為類A的友元函數,則應在類中加入語句_。答案:(P111)friend void B:fun

40、();解析聲明成員函數作為另外一個類的友元函數時,使用類作用域運算符:。20. 在編譯指令中,宏定義使用_指令。答案:(P6、97)#define解析靜態成員是所有對象共享的特征,也就是類的特征。C+程序設計模擬試卷(三)一、單項選擇題1. 設有定義int i;double j5;,則10+i+j值的數據類型是()A. intB. doubleC. floatD. 不確定答案:B解析:考察數據的轉換,j是double類型,運算只能作同類型的運算,所以要轉換,而int能自動轉換為double類型,所以結果是double類型。2. 要禁止修改指針p本身,又要禁止修改p所指向的數據,這樣的指針應定義

41、為()A. const char *p=“ABCD”;B. char *const p=“ABCD”;C. char const *p=“ABCD”;D. const char * const p=“ABCD”;答案:D解析:(P12)const char *p說明禁止通過p修改所指向的數據。char * const p則說明不能修改指針p的地址。因此const char * const p=“ABCD”;它禁止修改指針p本身,又禁止修改p所指向的數據。3. 類的構造函數被自動調用執行的情況是在定義該類的()A. 成員函數時B. 數據成員時C. 對象時D. 友元函數時答案:C解析:(P75)建

42、立對象時,自動構造函數的初始化對象,是系統自動調用的。而成員函數、友元函數,需要用戶直接調用,因此選擇C項。4. 已知類A是類B的友元,類B是類C的友元,則()A. 類A一定是類C的友元B. 類C一定是類A的友元C. 類C的成員函數可以訪問類B的對象的任何成員D. 類A的成員函數可以訪問類B的對象的任何成員答案:C解析:(P105)友元說明方法如下:friend?;/友元類類名使用友元可以訪問所有成員:(1)友元關系不能被繼承。(2)友元關系是單向的,不具有交換性。所以,B項和D項錯誤。(3)友元關系不具有傳遞性。所以,A項錯誤。5. 假定一個類的構造函數為“A(int i=4, int j=

43、0) a=i;b=j;”, 則執行“A x (1);”語句后,x.a和x.b的值分別為()A. 1和0B. 1和4C. 4和0D. 4和1答案:A解析:(P75)帶默認的構造函數,對應實參沒有值時就采用形參值。調用構造函數時,i=1,不采用默認值,而只有一個參數,j采用默認值0即j=0,因此a=1,b=0,選擇A項。6. 關于this指針使用說法正確的是()A. 保證每個對象擁有自己的數據成員,但共享處理這些數據的代碼B. 保證基類私有成員在子類中可以被訪問。C. 保證基類保護成員在子類中可以被訪問。D. 保證基類公有成員在子類中可以被訪問。答案:A解析:(P86)this指針是隱藏的,可以使

44、用該指針來訪問調用對象中的數據。基類的成員在派生類中能否訪問,與繼承方式有關,與this沒有關系。所以選擇A項。7. 所謂多態性是指 ()A. 不同的對象調用不同名稱的函數B. 不同的對象調用相同名稱的函數C. 一個對象調用不同名稱的函數D. 一個對象調用不同名稱的對象答案:B解析:(P167)多態性有兩種靜態多態性和動態多態性,靜態多態性是指調用同名函數,由于參數的不同調用不同的同名函數;動態多態性是指不同對象調用同名函數時,由于對象不同調用不同的同名函數。 多態性肯定具有相同的函數名,所以選擇B項。8. 友元關系不能()A. 提高程序的運行效率B. 是類與類的關系C. 是一個類的成員函數與

45、另一個類的關系D. 繼承答案:D解析:(P111)友元可以是函數與類的關系即友元函數,也可以類與類的關系即友元類,但友元不能繼承,是單向性,且不具有傳遞性。友元可以訪問類中所有成員,提高了訪問的方便性。因此選擇D項。9. 語句ofstream f(“TEMP.DAT”,ios:appios:binary)?的功能是建立流對象f,試圖打開文件TEMP.DAT 并與之連接,并且()A. 若文件存在,將文件寫指針定位于文件尾;若文件不存在,建立一個新文件B. 若文件存在,將其置為空文件;若文件不存在,打開失敗C. 若文件存在,將文件寫指針定位于文件首;若文件不存在,建立一個新文件D. 若文件存在,打

46、開失敗;若文件不存在,建立一個新文件答案:A解析:(P199)ios:binary,采用二進制形式,ios:app定位到文件尾部。10. 構造函數不具備的特征是()A. 構造函數的函數名與類名相同B. 構造函數可以重載C. 構造函數可以設置默認參數D. 構造函數必須指定類型說明答案:D解析:(P75)構造函數無返回類型不能繼承但可以重載,所以選擇D項。11. 在公有繼承的情況下,基類的公有或保護成員在派生類中的訪問權限()A. 受限制B. 保持不變C. 受保護D. 不受保護答案:B解析:(P132)繼承方式的不同派生類成員的權限也不同,采用公有繼承,除了私有無法訪問外,公有、保護在派生類中保持

47、不變,所以選擇B項。12. 假定一個類的構造函數為A(int aa,int bb) a=aa-;b=a*bb;,則執行A x(4,5);語句后,x.a和x.b的值分別為()A. 3和15B. 5和4C. 4和20D. 20和5答案:C解析:(P75)a=4,因為后減,b的值與a、bb相關,b4*5=20,而與aa沒有任何關系。13. C+對C語言做了很多改進,即從面向過程變成為面向對象的主要原因是()A. 增加了一些新的運算符B. 允許函數重載,并允許設置缺省參數C. 規定函數說明符必須用原型D. 引進了類和對象的概念答案:D解析:(P29)C+是一面向對象的語言,面向對象的特征,抽象、多態、

48、繼承和封裝。14. 在類中說明的成員可以使用關鍵字的是()A. publicB. externC. cpuD. register答案:A解析:extern用于聲明外部變量的。register聲明寄存器類型變量。無cpu類型。它們都不能聲明類成員。public聲明為公有訪問權限,所以選擇A項。15. C+語言中所有在函數中定義的變量,連同形式參數,都屬于()A. 全局變量B. 局部變量C. 靜態變量D. 函數答案:B解析:變量存儲類可分為兩類:全局變量和局部變量。(1)全局變量:在函數外部定義的變量稱為全局變量,其作用域為:從定義變量的位置開始到源程序結束。使用全局變量降低了程序的可理解性,軟件

49、工程學提倡盡量避免使用全局變量。(2)局部變量:在函數內部定義的變量稱為局部變量,其作用域為:從定義變量的位置開始到函數結束。局部變量包含自動變量(auto)靜態變量(static)以及函數參數。形參不能是靜態的。所以選擇B項。16. 在私有繼承的情況下,基類成員在派生類中的訪問權限()A. 受限制B. 保持不變C. 受保護D. 不受保護答案:A解析:(P132)私有繼承下,基類中的公有或保護成員在派生類中也是私有的,所以選擇A選項。17. 使用地址作為實參傳給形參,下列說法正確的是()A. 實參是形參的備份B. 實參與形參無聯系C. 形參是實參的備份D. 實參與形參是同一對象答案:D解析:(

50、P51)地址作為實參,表示實參與形參代表同一個對象。如果實參是數值,形參也是普通變量,此時形參是實參的備份。所以選擇D項。18. C+的繼承性允許派生類繼承基類的()A. 部分特性,并允許增加新的特性或重定義基類的特性B. 部分特性,但不允許增加新的特性或重定義基類的特性C. 所有特性,并允許增加新的特性或重定義基類的特性D. 所有特性,但不允許增加新的特性或重定義基類的特性答案:A解析:(P129)派生類有兩類成員:一是基類,二是自身類。派生類中的成員不能訪問基類中的私有成員,可以訪問基類中的公有成員和保護成員。19. 對于int *pa5;的描述,正確的是()A. pa是一個指向數組的指針

51、,所指向的數組是5個int型元素B. pa是一個指向某個數組中第5個元素的指針,該元素是int型變量C. pa5表示某個數組的第5個元素的值D. pa是一個具有5個元素的指針數組,每個元素是一個int型指針答案:D解析:(P117)指針數組:數組元素都是相同類型的指針,相同類型的指針是說指針所指向的對象類型是相同的。例如,語句int *pa5;定義了一個指針數組。在指針數組的定義中有兩個運算符:*和,運算符的優先級高于*,所以*pa5等價于*(pa5),pa5表示一個數組,而*表示后面的對象為指針變量,合在一起*pa5表示一個指針數組。該數組包含5個元素,每個元素都是指向int型的指針。所以選

52、擇D選項。20. 以下基類中的成員函數表示純虛函數的是()A. virtual void tt()=0B. void tt(int)=0C. virtual void tt(int)D. virtual void tt(int)答案:A解析:(P173)當在基類中不能為虛函數給出一個有意義的實現時,可以將其聲明為純虛函數,實現由派生類完成。格式:virtual()=0;。二、填空題1. 單目運算符作為類成員函數重載時,形參個數為_個。答案:(P189)0解析單目運算符使用成員函數重載可以不用形參,雙目運算符使用一個參數。2. 抽象類中至少要有一個_函數。答案:(P173)純虛解析至少有一個純虛

53、函數的類就稱為抽象類,即不能實例化。3. 設類A有成員函數void f(void);若要定義一個指向類成員函數的指針變量pf來指向f,該指針變量的聲明語句是:_。答案:(P117)void (A:*pf)(void)=&A:f;解析void(A:*pf)(void)=&A:f;指向成員函數的指針,它相當于兩條語句:void(A:*pf)(void);和pf=&A:f;。4. 執行下列程序double a=3.1415926,b=3.14;coutsetprecision(5)a, setprecision(5)bendl;程序的輸出結果是_。答案:3.1416,3.14解析題目設置精度即有效數字都是5,a四舍五入是3.1416,b是3.14。5. vector類中用于刪除向量中的所有對象的方法是_。答案:(P151)clear()解析向量的使用。返回向量中對象的方法有:front()back()operator,在向量中刪除

溫馨提示

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

評論

0/150

提交評論