CPP復(fù)習(xí)題答案_第1頁
CPP復(fù)習(xí)題答案_第2頁
CPP復(fù)習(xí)題答案_第3頁
CPP復(fù)習(xí)題答案_第4頁
CPP復(fù)習(xí)題答案_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、選擇題1 C+語言本身沒有定義I/O操作,C+標(biāo)準(zhǔn)庫iostream提供了基本的I/O類。I/O操作分別由兩個類istream和( C )提供,由它們派生出一個類iostream,提供雙向I/O操作。A. fstreamB. iostreamC. ostream D. cout2. 引入內(nèi)聯(lián)函數(shù)的主要目的是( B )。A.   縮短程序代碼,少占用內(nèi)存空間B.   既可以保證程序的可讀性,又能提高程序的運行效率C.   占用內(nèi)存空間少,執(zhí)行速度快D.  使程序的結(jié)構(gòu)比較清晰3. 重載函數(shù)是( A )A. 以函數(shù)參數(shù)來區(qū)分,而

2、不用函數(shù)的返回值來區(qū)分不同的函數(shù)B. 以函數(shù)的返回值來區(qū)分,而不用函數(shù)參數(shù)來區(qū)分不同的函數(shù)C. 參數(shù)表完全相同而返回值類型不同的兩個或多個同名函數(shù)D.    參數(shù)表和返回值類型都必須是不同的兩個或多個同名函數(shù)4. 在C+中,數(shù)據(jù)封裝要解決的問題是( D )。A. 數(shù)據(jù)的規(guī)范化B. 便于數(shù)據(jù)轉(zhuǎn)換C. 避免數(shù)據(jù)丟失D. 防止不同模塊之間數(shù)據(jù)的非法訪問5. 下列特性中,( B )不是面向?qū)ο蟮某绦蛟O(shè)計的特征。A.繼承B.內(nèi)聯(lián)函數(shù)C.多態(tài)性D.封裝6. 類B的對象必定是類A的對象,但是類A的對象卻不屬于類B,則類B和類A之間的關(guān)系是( C )。A. 組合關(guān)系B.

3、 間接關(guān)系C. 繼承關(guān)系D. 直接關(guān)系7. 下面對于友元函數(shù)描述正確的是( C )。A. 友元函數(shù)的實現(xiàn)必須在類的內(nèi)部定義B.友元函數(shù)是類的成員函數(shù)C. 友元函數(shù)破壞了類的封裝性 D.友元函數(shù)不能訪問類的私有成員8. 以下關(guān)于析構(gòu)函數(shù)的描述中( C )是錯誤的。A.析構(gòu)函數(shù)聲明和定義中沒有形參 B.析構(gòu)函數(shù)可以定義為內(nèi)聯(lián)函數(shù)。C.析構(gòu)函數(shù)可以重載 D.析構(gòu)函數(shù)可以定義為虛函數(shù)。9. 下面敘述錯誤的是( A )。A. 基類的protected成員在派生類中仍然是protected的B. 基類的protected成員在public派生類中仍然是protected的。C. 基類的protected成

4、員在private派生類中是private的。D. 基類的protected成員不能被派生類的對象訪問。10. 如果一個類至少有一個純虛函數(shù), 那么就稱該類為( A )。A. 抽象類 B. 虛基類C. 派生類 D. 以上都不對11. 當(dāng)公有繼承時,基類的( D )在派生類中成為保護(hù)成員,不能通過派生類的對象來直接訪問該成員。A.任何成員 B.公有成員和保護(hù)成員C.保護(hù)成員和私有成員 D.保護(hù)成員12. 當(dāng)私有繼承時,基類的( A )在派生類中成為私有成員,不能通過派生類的對象來直接訪問該成員。A. 任何成員 B.公有成員和保護(hù)成員C. 保護(hù)成員和私有成員 D.私有成員13. 派生類的對象對它的

5、基類成員中( A )是可以采用對象或者對象指針->的方式訪問的。A. 公有繼承的公有成員B. 公有繼承的私有成員C. 公有繼承的保護(hù)成員D. 私有繼承的公有成員14. 關(guān)于純虛函數(shù)和抽象類的描述中,錯誤的是( C )。A. 純虛函數(shù)是一種特殊的虛函數(shù),它沒有具體的實現(xiàn)。B. 抽象類是指具有純虛函數(shù)的類。C. 一個基類中說明有純虛函數(shù),該基類的派生類一定不再是抽象類。D. 抽象類只能作為基類來使用,其純虛函數(shù)的實現(xiàn)由派生類給出。15.下列說法錯誤的是( C )。A.若語言只支持類而不支持多態(tài),則不能稱為面向?qū)ο蟮摹.在運行時根據(jù)其類型確定調(diào)用哪個函數(shù)的能力叫多態(tài)性。C.靜態(tài)多態(tài)性也是在運

6、行時根據(jù)其類型確定調(diào)用哪個函數(shù)。D.C+中的靜態(tài)多態(tài)性是通過函數(shù)重載進(jìn)行實現(xiàn)的。16. ( D )不是構(gòu)造函數(shù)的特征A. 構(gòu)造函數(shù)的函數(shù)名與類名相同。B. 構(gòu)造函數(shù)可以重載。 C. 構(gòu)造函數(shù)可以設(shè)置缺省參數(shù)。D. 構(gòu)造函數(shù)必須指定類型說明。17下列標(biāo)識符中, A 不是C+的關(guān)鍵字; A. cinB. privateC. this D. operator18下列標(biāo)識符中, A 不是C+的關(guān)鍵字; A. coutB. virtualC. this D. template18下列標(biāo)識符中, A 不是C+的關(guān)鍵字; A. coutB. publicC. this D. sizeof19下列標(biāo)識符中,

7、A 不是C+的關(guān)鍵字; A. coutB. deleteC. this D. sizeof20下列標(biāo)識符中, A 不是C+的關(guān)鍵字; A. coutB. new C. this D. void21引用是一個變量的別名, 下列關(guān)于的引用的描述,正確的是( A )。A引用的值與被引用變量的值相等,內(nèi)存地址相同;B引用的值與被引用變量的值相等,內(nèi)存地址不相同;C引用的值與被引用變量的值不等,內(nèi)存地址相同;D引用的值與被引用變量的值不等,內(nèi)存地址不同;22公有繼承時,子類的訪問接口由( D )組成: A父類的非私有成員和子類的非私有成員; B父類的公有成員和子類的非私有成員; C父類的非私有成員和子類

8、的公有成員; D父類的公有成員和子類的公有成員;23公有繼承時,子類對象只可訪問父類中的( B )和子類自己的公有成員。 A非私有成員; B公有成員; C私有成員; D保護(hù)成員;24公有繼承時,子類成員函數(shù)不可以直接訪問父類中( C )。 A非私有成員; B公有成員; C私有成員; D保護(hù)成員;25公有繼承時,子類對象和子類成員函數(shù)必須通過父類( A )的成員函數(shù)訪問父類私有成員。 A非私有; B非公有; C靜態(tài); D私有;26下列關(guān)于虛函數(shù)的描述,正確的是( C )。 A靜態(tài)成員函數(shù)可以是虛函數(shù); B構(gòu)造函數(shù)可以是虛函數(shù); C析構(gòu)函數(shù)可以是虛函數(shù); D內(nèi)聯(lián)函數(shù)可以是虛函數(shù);27下列關(guān)于虛函數(shù)

9、的描述,正確的是( B )。 A靜態(tài)成員函數(shù)可以是虛函數(shù); B構(gòu)造函數(shù)不可以是虛函數(shù); C析構(gòu)函數(shù)不可以是虛函數(shù); D內(nèi)聯(lián)函數(shù)可以是虛函數(shù);28下列關(guān)于虛函數(shù)的描述,錯誤的是( B )。 A靜態(tài)成員函數(shù)不可以是虛函數(shù); B構(gòu)造函數(shù)可以是虛函數(shù); C析構(gòu)函數(shù)可以是虛函數(shù); D內(nèi)聯(lián)函數(shù)不可以是虛函數(shù);29下列關(guān)于虛函數(shù)的描述,錯誤的是( C )。 A靜態(tài)成員函數(shù)不可以是虛函數(shù); B構(gòu)造函數(shù)不可以是虛函數(shù); C析構(gòu)函數(shù)不可以是虛函數(shù); D內(nèi)聯(lián)函數(shù)不可以是虛函數(shù);注:靜態(tài)成員函數(shù)不能是虛函數(shù);內(nèi)聯(lián)函數(shù)不能是虛函數(shù);構(gòu)造函數(shù)不能是虛函數(shù);析構(gòu)函數(shù)可以是虛函數(shù),且通常聲明為虛函數(shù)。填空題1. 在C+程序中

10、,使用基本輸入輸出流需要包含的頭文件是 “iostream.h” 。2. 具有相同函數(shù)名但具有不同參數(shù)表的函數(shù)稱為 重載函數(shù) 。3. 在一個函數(shù)的定義或聲明前加上關(guān)鍵字 inline 時,該函數(shù)就聲明為內(nèi)聯(lián)函數(shù)。4. 當(dāng)一個類對象的成員函數(shù)被調(diào)用時,該成員函數(shù)的 this 指針指向調(diào)用它的對象。5.在撤銷類的對象時,C+程序?qū)⒆詣诱{(diào)用該對象的 析構(gòu) 函數(shù)。6. 對類中的成員函數(shù)和屬性的訪問是通過 public 、 private 和 protected 這3個關(guān)鍵字來控制的。7. 當(dāng)用public繼承從基類派生一個類時,基類的public成員成為派生類的_public_成員,protected

11、成員成為派生類的_ protected _ 成員。8. 有如下定義語句: MyClass p10,*q;則系統(tǒng)自動調(diào)用該類構(gòu)造函數(shù) 10 次。當(dāng)類對象數(shù)組p離開它的作用域時,系統(tǒng)自動調(diào)用該類析構(gòu)函數(shù) 10 次。9. 在類定義中,將 =0 置于虛函數(shù)的函數(shù)原型的末尾可以將該函數(shù)聲明為純虛函數(shù)。10. 帶有 純虛函數(shù) 的類稱為抽象類,它只能作為 其他派生類的基類 來使用。11. 假定用戶沒有給一個名為MyClass的類定義析構(gòu)函數(shù),則系統(tǒng)為其定義的默認(rèn)析構(gòu)函數(shù)形式為 MyClass:MyClass() 。12. 有如下定義語句:MyClass *p;,則執(zhí)行 

12、;p=new MyClass; 語句時,將自動調(diào)用該類的 構(gòu)造函數(shù) 。執(zhí)行delete p;語句時,將自動調(diào)用該類的 析構(gòu)函數(shù) 。13. 有如下對象數(shù)組定義語句:MyClass *p10;當(dāng)對象指針數(shù)組p離開它的作用域時,系統(tǒng)自動調(diào)用該類析構(gòu)函數(shù) 0 次。/指針不調(diào)用,申請內(nèi)存時才調(diào)用。14. 在結(jié)構(gòu)定義中,數(shù)據(jù)和成員函數(shù)默認(rèn)權(quán)限是公有的。在類定義中,數(shù)據(jù)和成員函數(shù)默認(rèn)權(quán)限是 私有的 。15C是混合性程序設(shè)計語言,既支持面向過程,又支持面向 對象 。16面向?qū)ο蟪绦蛟O(shè)計的三大特點: 封裝 、 繼承 、 多態(tài) 。17重載函數(shù)調(diào)用時,編譯器按返回類型、參數(shù)類型、參數(shù)個

13、數(shù)、參數(shù)順序進(jìn)行匹配,重載函數(shù)至少在 參數(shù)個數(shù) 、 參數(shù)類型、 或 參數(shù)順序 上有所不同。18函數(shù)模板比函數(shù)重載的表達(dá)更簡潔,但只有 參數(shù)個數(shù)相同 、 函數(shù)體 相同,僅 類型 不同的函數(shù)才能定義模板。19void型指針是通用型指針, 任何 類型的指針值都可以賦給void類型指針,但使用時必須進(jìn)行 顯式 轉(zhuǎn)換,否則出錯。20在程序中使用運算符new申請內(nèi)存,應(yīng)該相應(yīng)地使用運算符 delete 來釋放申請的內(nèi)存。22JAVA是純面向?qū)ο笳Z言,C+是混合性程序設(shè)計語言,混合語言的特點是既支持傳統(tǒng)的程序設(shè)計方法,又支持 面向?qū)ο?程序設(shè)計方法。23類是 數(shù)據(jù) 和 代碼 的復(fù)合體。/ 數(shù)據(jù)(成員) 和(

14、成員)函數(shù) 也OK!24類可以有 多 個構(gòu)造函數(shù),有 一 個析構(gòu)函數(shù)。25若類中一個構(gòu)造函數(shù)都沒有,則C+自動提供一個無參數(shù)的 默認(rèn)構(gòu)造函數(shù) ,負(fù)責(zé)創(chuàng)建對象。26類中 const數(shù)據(jù)成員 和 引用 類型的數(shù)據(jù)成員必須在該類的對象建立的同時進(jìn)行初始化,這種初始化只能用成員初始化列表進(jìn)行。27在類中使用 static 聲明的成員稱為靜態(tài)成員。28靜態(tài)成員函數(shù)在類中只有語法上的作用,它不是對象的成員,沒有 this 指針,必須將對象作為參數(shù)傳入,才能在靜態(tài)成員函數(shù)訪問該對象的成員。29友元函數(shù)是對設(shè)計類時未定義完整操作集的補充,是類外的函數(shù),它不是對象的成員函數(shù),沒有 this 指針,必須將對象作為

15、參數(shù)傳入。30C程序是由一組 函數(shù) 組成的,C+面向?qū)ο蟪绦蚴怯梢唤M 類 組成的。31面向?qū)ο蟮某绦蛟O(shè)計主要是類的設(shè)計,在編譯時,一個面向?qū)ο蟮南到y(tǒng)由 類 組成,在運行時,系統(tǒng)由 對象 組成。32 單一 繼承形成一個倒掛的樹; 多重 繼承形成一個有向無環(huán)圖。33當(dāng)類中包含虛擬函數(shù)時,C+編譯器為類加上一個 虛函數(shù) 指針,該指針指向虛擬函數(shù)表。34當(dāng)類中包含虛擬函數(shù)時,C+編譯器為類加上一個虛函數(shù)指針,該指針指向 虛擬函數(shù)表。35包含虛擬函數(shù)的類通過 vptr指針 和 虛擬函數(shù)表 可以在程序運行時依據(jù)指針實際指向的對象調(diào)用對應(yīng)的虛擬函數(shù),從而實現(xiàn)多態(tài),達(dá)到動態(tài)綁定的目的。36派生類的對象可以賦給

16、基類的對象;由于基類對象不具有派生類對象所具有的成員,因此 基類 的對象不可以賦值給 派生類 對象。37運算符重載的實質(zhì)就是 函數(shù)重載 。通過運算符重載可以使應(yīng)用于基本數(shù)據(jù)類型的運算符作用于用戶自定義數(shù)據(jù)類型。問答題:1. 面向過程和面向?qū)ο笤诔绦蚪M織方式上的差別? 面向過程的核心是功能的分解,最終的程序由過程構(gòu)成,將數(shù)據(jù)結(jié)構(gòu)和過程作為兩個實體對待,著重點在過程。缺點就是一旦數(shù)據(jù)結(jié)構(gòu)需要變更,需修改與之有關(guān)的所有模塊。 面向?qū)ο笾袛?shù)據(jù)構(gòu)成軟件分解的基礎(chǔ),而不是功能,數(shù)據(jù)與定義在在它上面的用戶需要構(gòu)成整體,數(shù)據(jù)本身不能被外部程序和過程直接存取。程序一般由類的定義和類的使用兩部分組成,在主程序中定

17、義各對象并規(guī)定它們之間傳遞消息的規(guī)律。程序中的一切操作都是通過向?qū)ο蟀l(fā)送消息來實現(xiàn),對象接收到消息后,啟動有關(guān)方法完成操作。類由繼承關(guān)系產(chǎn)生相互的聯(lián)系。2. C+中采用類的概念將數(shù)據(jù)以及處理數(shù)據(jù)的函數(shù)封裝在一起的好處? C+采用類(class)的概念將數(shù)據(jù)以及處理數(shù)據(jù)的函數(shù)封裝在一起,將一部分行為作為外部訪問的接口與外部發(fā)生聯(lián)系,而將數(shù)據(jù)和其他行為進(jìn)行有效隱藏,就可以達(dá)到對數(shù)據(jù)訪問權(quán)限的合理控制。通過這種有效隱藏和合理控制,就可以增強數(shù)據(jù)的安全性,減輕開發(fā)軟件系統(tǒng)的難度。3.面向?qū)ο蟪绦蛟O(shè)計具有哪三大特點及其目的? 封裝,繼承,多態(tài) 封裝,也就是把客觀事物封裝成抽象的類,并且類可以把自己的數(shù)據(jù)

18、和方法只讓可信的類或?qū)ο蟛僮?,對不可信的進(jìn)行信息隱藏。 繼承:可以使用類的現(xiàn)有類的所有功能,并在無需編寫原來類的情況下對這些功能進(jìn)行擴展。 多態(tài):允許將子類類型的指針賦值給父類類型的指針。4.C+程序設(shè)計語言中this指針的作用? 一個對象的this指針并不是對象本身的一部分,不會影響sizeof(對象)的結(jié)果。this作用域是在類內(nèi)部,當(dāng)在類的非靜態(tài)成員函數(shù)中訪問類的非靜態(tài)成員的時候,編譯器會自動將對象本身的地址作為一個隱含參數(shù)傳遞給函數(shù)。也就是說,即使你沒有寫上this指針,編譯器在編譯的時候也是加上this的,它作為非靜態(tài)成員函數(shù)的隱含形參,對各成員的訪問均通過this進(jìn)行。5.C+程序

19、設(shè)計語言中虛函數(shù)指針和虛函數(shù)表的作用? C+編譯器為每個“內(nèi)含虛擬函數(shù)的類”建立一個虛擬函數(shù)表(vtable),表中每一個指針元素指向一個虛擬函數(shù)的地址,編譯器為類加上一個成員變量vptr,vptr是一個指向虛擬函數(shù)表的指針。每一個派生類的對象,都有一個vptr,對象調(diào)用虛擬函數(shù)就是通過vptr找到虛擬函數(shù)表,再找到虛擬函數(shù)的真正地址。虛擬函數(shù)表的內(nèi)容是依據(jù)類中的虛擬函數(shù)聲明次序一一填入函數(shù)指針。派生類繼承基類的虛擬函數(shù)表,派生類中改寫虛擬函數(shù),虛擬函數(shù)表中元素所指的函數(shù)地址不再是基類的函數(shù)地址,而是派生類的函數(shù)地址。包含虛擬函數(shù)的類通過vptr指針和虛擬函數(shù)表可以在程序運行時依據(jù)指針實際指向

20、的對象調(diào)用對應(yīng)的虛擬函數(shù),從而實現(xiàn)多態(tài)(Polymorphism)。為了達(dá)到動態(tài)綁定的目的,虛擬函數(shù)是了解多態(tài)(Polymorphism)以及動態(tài)綁定的關(guān)鍵,同時也是了解如何使用MFC的關(guān)鍵。6.C+程序設(shè)計語言是如何實現(xiàn)多態(tài)的? 共用同一個函數(shù)名,同時有不同數(shù)量或者不同類型的參數(shù)。 系統(tǒng)會根據(jù)參數(shù)自動調(diào)用對應(yīng)的函數(shù),這樣就實現(xiàn)了多態(tài)7.為什么析構(gòu)函數(shù)通常聲明為虛函數(shù),而構(gòu)造函數(shù)不能是虛函數(shù)? 因為構(gòu)造函數(shù)不被繼承,而虛函數(shù)是要在派生類中重定義的。定義虛析構(gòu)函數(shù)后,由于多態(tài),當(dāng)使用基類指針指向派生類對象時,會調(diào)用派生類的虛構(gòu)函數(shù),然后派生類的析構(gòu)函數(shù)自動調(diào)用基本析構(gòu)函數(shù)。不是虛的話,直接調(diào)用基

21、類的析構(gòu)函數(shù)了。如果派生類中有用new分配的內(nèi)存,就無法釋放。8.為什么子類對象可以給父類對象賦值,而父類對象不能給子類對象賦值? 父類定義為抽象接口類,子類繼承父類然后重新實現(xiàn)接口。C+中子類的對象賦值給父類的對象。如果把子類的對象賦值給父類的對象,只是把子類中的父類子對象賦值給父類的對象,父類的對象無法擁有子類特有的成員。9.類中的靜態(tài)成員與類的數(shù)據(jù)成員有什么區(qū)別? 靜態(tài)數(shù)據(jù)成員是擁有全局壽命的成員,即在文件的開始到結(jié)束期間,內(nèi)存始終都為其分配存儲單元,它可以是局部變量,也可以使全局變量。 非靜態(tài)數(shù)據(jù)成員,其壽命局限于其塊作用域,從“”后定義開始到遇到“”代表其結(jié)束,內(nèi)存自動釋放空間。10

22、.深拷貝和淺拷貝的區(qū)別? 當(dāng)出現(xiàn)類的等號賦值時,會調(diào)用拷貝函數(shù) 在未定義顯示拷貝構(gòu)造函數(shù)的情況下,系統(tǒng)會調(diào)用默認(rèn)的拷貝函數(shù)即淺拷貝,它能夠完成成員的一一復(fù)制。當(dāng)數(shù)據(jù)成員中沒有指針時,淺拷貝是可行的。 但當(dāng)數(shù)據(jù)成員中有指針時,如果采用簡單的淺拷貝,則兩類中的兩個指針將指向同一個地址,當(dāng)對象快結(jié)束時,會調(diào)用兩次析構(gòu)函數(shù),而導(dǎo)致指針懸掛現(xiàn)象。 所以,這時,必須采用深拷貝。 深拷貝與淺拷貝的區(qū)別就在于深拷貝會在堆內(nèi)存中另外申請空間來儲存數(shù)據(jù),從而也就解決了指針懸掛的問題。 簡而言之,當(dāng)數(shù)據(jù)成員中有指針時,必須要用深拷貝。11.指針類型的作用?子類指針與父類指針強制轉(zhuǎn)換時要注意什么? 因為子類實例在內(nèi)存

23、排列上,先是把父類的所有內(nèi)容排在前面,因此父類的指針指過來時,父類的各成員的偏移地址都是不變的.12.何為抽象類?抽象類在程序中的作用?抽象類指的是含有純虛函數(shù)的類,該類不能建立對象,只能聲明指針和引用,用于基礎(chǔ)類的接口聲明和運行時的多態(tài) 另外,如果抽象類的某個派生類在向繼承體系的根回溯過程中,并不是所有的純虛函數(shù)都實現(xiàn)了,該類也是抽象類,同樣不能建立對象。抽象類的主要作用是將有關(guān)的組織在一個繼承層次結(jié)構(gòu)中,由它來為它們提供一個公共的根,相關(guān)的子類是從這個根派生出來的。13.運算符重載的本質(zhì)是什么?有哪兩種實現(xiàn)方式? 本質(zhì)就是對已有的運算符重新進(jìn)行定義,賦予其另一種功能,以適應(yīng)不同的數(shù)據(jù)類型。

24、 方式:1.定義為它將要操作的類的成員函數(shù)2.定義為類的友元函數(shù)。14. 內(nèi)聯(lián)函數(shù)的優(yōu)缺點?通常在什么情況下使用? 優(yōu)點是提高運行時間效率,缺點是增加了空間開銷 內(nèi)聯(lián)函數(shù)在C+類中,應(yīng)用最廣的,用來定義存取函數(shù)。我們定義的類中一般會把數(shù)據(jù)成員定義成私有的或者保護(hù)的,這樣,外界就不能直接讀寫我們類成員的數(shù)據(jù)了。對于私有或者保護(hù)成員的讀寫就必須使用成員接口函數(shù)來進(jìn)行。如果我們把這些讀寫成員函數(shù)定義成內(nèi)聯(lián)函數(shù)的話,將會獲得比較好的效率。讀程題1.在注釋符/后面注明變量類型(全局變量、局部變量、靜態(tài)變量)及輸出結(jié)果。#include "iostream.h"int length=1

25、0;/ 變量類型:全局變量 int countVolumn(int width,int height);int countVolumn(int length,int width,int height);void main()cout<<"length"<<length<<endl;/ 輸出結(jié)果: length=10 int length,width,height,volumn; /變量類型: 局部變量 length=1;width=1;height=1;volumn=:length*width*height;cout<<&qu

26、ot;體積"<<volumn<<endl; /輸出結(jié)果: 體積=10 volumn=countVolumn(width,height);cout<<"體積"<<volumn<<endl; /輸出結(jié)果:體積=10 volumn=length*width*height;cout<<"體積"<<volumn<<endl; /輸出結(jié)果:體積=1 volumn=countVolumn(length,width,height);cout<<"

27、;體積"<<volumn<<endl; /輸出結(jié)果: 體積=2 volumn=countVolumn(length,width,height);cout<<"體積"<<volumn<<endl; /輸出結(jié)果: 體積=3 int countVolumn(int width,int height)return length*width*height;int countVolumn(int length,int width,int height)static int temp=1;/變量類型: 靜態(tài)變量 tem

28、p=temp+length;return temp*width*height;2.下列程序給出了基類CFurniture 及其派生類CDesk的描述,分析成員函數(shù)ShowInfo()和main()中帶下劃線的代碼行正確性,并依據(jù)注釋行的提示給出結(jié)果。#include "iostream.h"class CFurnitureprivate: double Weight;protected:int Material;public:int Color;public: CFurniture (int c,int m,double w)Color=c; Material=m;Weig

29、ht=w; CFurniture ()double GetWeight()return Weight;int GetMaterial() return Material;int GetColor() return Color;class CDesk:public CFurniture private:int Length,Width;public:int Height;public:CDesk (int H,int L,int W,int c, int m, double w): CFurniture (c,m,w) Height=H; Length=L; Width=W; CDesk ()v

30、oid ShowInfo();void CDesk:ShowInfo( )/注:可訪問的,不需要修改。/判斷該成員函數(shù)中能否訪問下列數(shù)據(jù),如不可訪問,改為可訪問cout<<Length<<endl; /判斷: 可訪問 修改: cout<<Width<<endl; /判斷:可訪問 修改: cout<<Height<<endl; /判斷: 可訪問 修改: cout<<Color<<endl; /判斷: 可訪問 修改: cout<<Material<<endl; /判斷: 可訪問

31、修改: cout<<Weight<<endl; /判斷: 不可訪問 修改: cout<<GetWeight()<<endl; void main( ) /判斷帶下劃線代碼行的正確性,如正確,寫出結(jié)果;如不正確,寫出原因CDesk mDesk(1,2,3,4,5,100);cout<< mDesk.Length<<endl; /判斷: 錯 原因或結(jié)果 子類對象不可直接訪問類的私有成員 cout<< mDesk.Width<<endl; /判斷:錯 原因或結(jié)果 子類對象不可直接訪問類的私有成員 cout

32、<< mDesk.Height<<endl;/判斷:正確 原因或結(jié)果 1 cout<< mDesk .Color<<endl; /判斷: 正確 原因或結(jié)果 4 cout<< mDesk .Material<<endl;/判斷:錯 原因或結(jié)果 子類對象不可直接訪問父類的保護(hù)成員 cout<< mDesk .Weight<<endl; /判斷: 錯 原因或結(jié)果 子類對象不可直接訪問父類的保護(hù)成員 3.下列程序是關(guān)于虛擬函數(shù)與多態(tài)的。讀程序,寫出程序運行結(jié)果。#include "iostream

33、.h"class CShapepublic: int color;public: virtual void display() cout<<"Shape n"class CRect:public CShapepublic: double length,width;public: virtual void display() cout<<"Rectangle n"class CSquare:public CRectpublic: double edgeLength;public: virtual void display(

34、) cout<<"Square n"void main() CShape aShape;aShape.color=1; CRect aRect;aRect.color=2; CSquare aSquare;aSquare.color=3; CShape *pShape=&aShape,&aRect,&aSquare; for(int i=0;i<3;i+) pShapei->display();cout<<pShapei->color<<endl; (CRect *)pShape0)->di

35、splay(); cout<< (CShape *)pShapei)->color<<endl;運行結(jié)果為:Shape 1 Rectangle 2 Square 3 Shape 14.依據(jù)下列類的繼承的描述,參照示意圖,回答main函數(shù)中的問題。class CBase CBaseint xint aint xint bchar cpublic: BaseA int x;完整C類對象class BaseA:public CBase CBase CBaseBpublic: int a;class BaseB :public CBase public: int b;cl

36、ass C: public BaseA, public BaseB public: char c; int addA() return BaseA:xBaseB:x;void main( )/判斷帶下劃線代碼行的正確性,如正確,寫出結(jié)果;如不正確,寫出原因C mObj; mObj.x; /判斷:錯 原因或結(jié)果: 產(chǎn)生二義性 mObj.CBase:x;/判斷:錯 原因或結(jié)果: 產(chǎn)生二義性 mObj.BaseA:x=5; mObj.BaseB:x=10; cout<<mObj.BaseA:x<<endl;/判斷:正確 原因或結(jié)果:5 cout<<mObj.Bas

37、eB:x<<endl;/判斷:正確 原因或結(jié)果: 10 21.分析下列程序,寫出其運行結(jié)果。#include <iostream.h>#define N 100class CStackprivate: int stackN;int top;public:CStack() top=0; cout<<"Hello "CStack() cout<<"Bye" void push(int i) ;int pop();void class CStack:push(int i)if (top=N) cout<&l

38、t;"Overflow"return;else top+; stacktop=i;int class CStack:pop()int temp;if (top=0) cout<<"Underflow" return 0; else temp=stacktop; top-; return temp;void main()CStack *ptr=new CStack;ptr->push (100);ptr->push(60);cout <<ptr->pop( )<<" "cout &l

39、t;<ptr->pop( )<<" "cout << "OK!"<<endl;delete ptr;答: Hello 60 100 OK! Bye 22. 分析下列程序,寫出其運行結(jié)果。#include <iostream.h>class vehicleint wheels;float weight;public:void message(void) cout << “Vehicle messagen”; ;class car : public vehicleint passenge

40、r_load;public:void message(void) cout << “Car messagen”;class truck : public vehicleint passenger_load;float payload;public:int passengers(void) return passenger_load;class boat : public vehicle int passenger_load;public:int passengers(void) return passenger_load; void message(void) cout <&

41、lt; “Boat messagen”;int main()vehicle *unicycle;unicycle = new vehicle; unicycle ->message();delete unicycle;unicycle = new car; unicycle ->message();delete unicycle ;unicycle = new truck; unicycle ->message(); delete unicycle ;unicycle = new boat; unicycle ->message();delete unicycle ;r

42、eturn 0;答: Vehicle message Vehicle message Vehicle message Vehicle message 23. 如果將上題第22小題中vehicle的成員函數(shù)message的定義改為:virtual void message(void) cout << “Vehicle message n”;寫出修改后的程序的運行結(jié)果。答: Vehicle message Car message Vehicle message Boat message 21.分析下列程序,寫出其運行結(jié)果。#include <iostream.h>

43、class MyClasspublic: MyClass(int a)x=a; void Fun1()x+; void Fun2()x+=2; void Fun3()x+=3; void Print()cout<<"x="<<x<<end1;private: int x;void main()MyClass my(8);void (MyClass:*pf)();my.Print();pf=MyClass:Fun1; (my.*pf)();

44、my.Print();pf=MyClass:Fun2; (my.*pf)(); my.Print();pf=MyClass:Fun3; (my.*pf)(); my.Print();答:x=8 x=9 x=11 x=14  27. 下列程序定義了一實部為mal,虛部為imag的復(fù)數(shù)類complex,并在類中重載了復(fù)數(shù)的+、-操作。請將下列程序補充完整。Class Complexpublic: Complex(double r=0.0,double i=0.O)real=r;imag=i; Complex operator +(Complex);

45、 friend Complex operator -(Complex,Complex);private: double real,imag;Complex Complex: operator +(Complex c) this->real+=c.real,this->imag+=c.imag; return *this;Complex operator -(Complex c1,Complex c2) return Complex( c1.real+c2.real,c1.imag+c2.imag _);

46、26. 下面程序是一個含有比較運算符和賦值運算符重載的程序,請?zhí)羁胀瓿沙绦驅(qū)崿F(xiàn)該程序。#include <iosteam.h>class pointprivate:float x,y;public:point(float xx=0,float yy=0) x=xx,y=yy ;point(point&);point();bool operator=(point);bool operator!=(point);point& operator+=(point);float getx()return x;float gety()return y;point:point(p

47、oint& p) x=p.getx(),y=p.gety() ; bool point:operator=(point p)if(x=p.getx()&&(y=p.gety() )return 1;elsereturn 0;bool point:operator!=(point p)if(x!=.getx()&&(y!=.gety() )return 1;elseReturn 0;point& point:operator+=(point p)this->x+=p.getx();this->y+=p.gety();return *th

48、is void main()point p1(1,2),p2(3,4);p3(5,6);cout<<”p1=p2? ”<<(p1=p2)<<endl;cout<<”p1!=p2? ”<<(p1!=p2)<<endl;p3+=p1;cout<<”p3+=p1,p3: ”<<p3.getx()<<p3.gety()<<endl;四、程序設(shè)計題1.運算符重載:依據(jù)下列關(guān)于矩陣類的描述,寫出、-等操作符重載的實現(xiàn)。/不考#include "iostream.h"#

49、include "stdlib.h"class CMyArraypublic:int raw,col;long *data;public:CMyArray(int m,int n);CMyArray()raw=0; col=0; data=NULL;CMyArray()CMyArray operator(CMyArray& B);/寫出矩陣加法運算符重載的實現(xiàn)CMyArray operator-(CMyArray& B); /寫出矩陣減法運算符重載的實現(xiàn);CMyArray:CMyArray(int m,int n)raw=m;col=n;data=new l

50、ongraw*col;for(int i=0;i<m;i+)for(int j=0;j<n;j+)*(data+i*col+j)=rand( );/寫出矩陣加法運算符重載的實現(xiàn)CMyArray CMyArray:operator (CMyArray& b) /寫出矩陣減法運算符重載的實現(xiàn)CMyArray CMyArray:operator-(CMyArray& b) 2依據(jù)下列關(guān)于復(fù)數(shù)類的描述,寫出、/、!等操作符重載的實現(xiàn)。class CComplexprivate:int real, image;public:CComplex(int a,int b)real=a;image=b;CComplex()CComplex()int getReal() return real;int getImage()return image;CComplex operator-(CComplex& c);/給出實現(xiàn)BOOL operator= =(CComplex& c); /給出實現(xiàn)BOOL

溫馨提示

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

評論

0/150

提交評論