21.A。【解析】成員函數不一定是內聯函數。
22.C。【解析】A、B項中,實參不全,參數默認為函數原型中的初始值,但在C項中,第二個實參(char型)與函數原型中的第二個形參類型不一致,故C項錯誤。
23.D。【解析】C++類中的靜態成員變量是該類中所有對象所共有的,它能夠被類中的任何函數調用,所以選項A,B,C是錯誤的。而類的靜態數據成員是必須要進行初始化才能使用。
24.B。【解析】A*p1,A*p2為指向A類對象的指針,故“p1→m=3,(*p2).m=4”是正確的。但k2不是指針,k2→m的表示是錯誤的。
25.B。【解析】本題考核拷貝構造函數。上述程序中,拷貝構造函數一共被調用了3次:第1次是在執行語句Datedate3(date1)時,用已經建立的對象date1對正在建立的對象date3進行初始化;第2次是在調用fun函數時,由于是傳值調用,因此實參對象date3要對形參對象d進行初始化;第3次是在執行fun函數中的返回語句returntemp;時,系統初始化一個匿名對象時使用了拷貝構造函數。
26.C。【解析】純虛函數是在聲明虛函數時被“初始化”為0的虛函數。不定義對象而只作為一種基本類型作為繼承的類,稱為抽象類。凡是包含純虛函數的類都是抽象類。抽象類的作用是作為一個類族的共同基類。
27.A。【解析】題中fun函數進行了遞歸調用,第1次調用時:fun(3)n=3,s=3-fun(2),第二次調用時:fun(2)n=2,s=2,返回第一次調用后,s=3-2=1。
28.B。【解析】在C++程序中的typename是都可以替換為class的,但class不能都替換為typename。
29.C。【解析】Concl定義cl對象,調用Con的無參數構造函數,輸出1,ID值變為A,執行show(c1)時會調用拷貝構造函數,將cl對象的值復制給show函數的形參,此時輸出3,然后在show()中輸出cl的lD值A,Conc2(’B’)定義c2對象,調用Con(charID)構造函數,輸出2,c2的ID值為B,show(c2)執行時先調用拷貝構造函數輸出3,然后輸出B。因此程序輸出結果為“13A23B”。
30.C。【解析】該題主要要搞清楚以下幾點:①定義了一個指針數組char*p[2]后,程序中第一個循環“for(i=0;i(2;i++)p[i]=ch[i]”的作用是使指針數組的p[0]元素(它本身是一個指針)指向了二維數組ch的第一行字符串,并使指針數組的p[1]元素指向了二維數組ch的第二行字符串,這樣,就使指針數組P和二維數組ch建立起了一種對應關系,以后對二維數組ch的某個元素的引用就有兩種等價的形式:ch[i][j]或p[i][j]。②對二維數組ch的初始化,使其第一行ch[0]中存入了字符串“6937”,第二行ch[1]中的內容為字符串“8254”。③程序中第二個循環中的循環體“s=s*10+p[i][j]-’0’”的功能是這樣的,每執行一次,將s中的值乘以10(即將s中的數值整體向左移動一位,并在空出來的個位上添一個0),再將當前p[i][j]中的字符量轉換為相應的數字,然后把這個數字加到s的個位上。④注意到內層循環的循環條件p[i][3]>’\0’是指p[i][j]中的字符只要不是字符串結束標志’\0’就繼續循環,語句j+=2;是使下標j每次增加2,即一個隔一個地從p[i]所指向的字符串中取出字符。經過上述解析后,不難看出,該程序首先從p[0]所指向的字符串“6937”中一個隔一個地取出字符,分別是“6”和“3”,然后從p[1]所指向的字符串“8254”中一個隔一個地取出字符,分別是“8”和“5”,同時經過轉換和相加運算后,結果s中的值應該是6385。
31.A。【解析】本題考查C++中cin輸入流對象的使用規則,其特點是以空格、回車和tab為分隔符。因此this和is之間的空格告訴cin對象停止接收后面的數據。故正確答案為A。
32.D。【解析】因題目中定義的指針value是指淘變量i的,所以直接利用語句MyClass(inti){value=newint(i);}對value進行賦值即可。
33.D。【解析】選項A、B和C都不正確,因為友元關系是單項的,并且沒有交換性、傳遞性。
34.C。【解析】主函數中調用fun(3),在fun內部當n>2時,遞歸調用fun(n-1)+fun(n-2),否則返回2。所以當n=3時,調用fun(2)+fun(1),即返回2+2,等于4。
35.A。【解析】本題考查拷貝構造函數的知識。如果類中沒有實現拷貝構造函數可以完成數據成員的自動賦值,對于復雜對象,則可能需要顯式定義拷貝構造函數。
36.C。【解析】C++中,類是用戶自定義的一種數據類型,對象是類的實例,類定義了屬于該類的所有對象的共同特性。一個類作為一種數據類型,它可以定義多個對象。
37.A。【解析】選項A中,重載函數中是允許使用默認參數的;為了使重載函數有意義,不要使用重載函數來描述毫不相干的函數;重載函數中編譯是根據參數表進行選擇的,包括參數的個數和類型。
38.B。【解析】在C++語言中,調用函數不可能改變實參指針變量的值,但可以改變實參指針變量所指變量的值。
39.B。【解析】本題思路巧妙,分析時可以發現b=(a+b)-b,則此時b中放的是a,完成交換工作的一半,然后要將b放到a中,將表達式展開,則為a=(a+b)-a,此時正好把b放到a中。此時完成全部的交換。
40.A。【解析】從循環語句中可以看出,是在0到4的循環中輸出數組a中的前5個元素,輸出的值為*(P+i),即為指針P向后移動指向的元素。所以初始化要將指針P指向數組a,即int*p=a;。
編輯推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |