第8 繼承與多態(tài)習(xí)題 - noanswer.doc_第1頁(yè)
第8 繼承與多態(tài)習(xí)題 - noanswer.doc_第2頁(yè)
第8 繼承與多態(tài)習(xí)題 - noanswer.doc_第3頁(yè)
第8 繼承與多態(tài)習(xí)題 - noanswer.doc_第4頁(yè)
第8 繼承與多態(tài)習(xí)題 - noanswer.doc_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

6繼承與派生習(xí)題 繼承與多態(tài)習(xí)題一. 基本概念與基礎(chǔ)知識(shí)自測(cè)題8.1 填空題8.1.1 如果類(lèi)繼承了類(lèi),則類(lèi)稱(chēng)為 (1) 類(lèi),而類(lèi)稱(chēng)為 (2) 類(lèi)。 (3) 類(lèi)的對(duì)象可作為 (4) 類(lèi)的對(duì)象處理,反過(guò)來(lái)不行,因?yàn)?(5) 。如果強(qiáng)制轉(zhuǎn)換則要注意 (6) 。答案:(1)基類(lèi)(2)派生類(lèi)(3)派生類(lèi)(4)基類(lèi)(5)派生類(lèi)有一些新成員(6)只能派生類(lèi)強(qiáng)制轉(zhuǎn)換為基類(lèi)8.1.2 當(dāng)用public繼承從基類(lèi)派生一個(gè)類(lèi)時(shí),基類(lèi)的public成員成為派生類(lèi)的 (1) 成員,protected成員成為派生類(lèi)的 (2) 成員,對(duì)private成員是 (3) 。公有派生可以使其類(lèi)的 (4) ,所以公有派生是主流。答案:(1)public成員(2)protected成員(3)不可訪(fǎng)問(wèn)(4)接口不變8.1.3 利用繼承能夠?qū)崿F(xiàn) (1) 。這種實(shí)現(xiàn)縮短了程序開(kāi)發(fā)的時(shí)間,VC+中的 (2) 很好地體現(xiàn)了這一點(diǎn)。答案:(1)代碼的復(fù)用(2)MFC編程8.1.4 一個(gè)派生類(lèi)只有一個(gè)直接基類(lèi)的情況稱(chēng)為 (1) ,而有多個(gè)直接基類(lèi)的情況稱(chēng)為(2) 。繼承體現(xiàn)了類(lèi)的 (3) 概念,這在MFC中得到了很好表現(xiàn),MFC中只采用了 (4) 。答案:(1)單繼承(2)多重繼承(3)層次(4)單繼承8.1.5 C+中多態(tài)性包括兩種多態(tài)性: (1) 和 (2) 。前者是通過(guò) (3) 實(shí)現(xiàn)的,而后者是通過(guò) (4) 和 (5) 來(lái)實(shí)現(xiàn)的。答案:(1)編譯時(shí)的(2)運(yùn)行時(shí)的(3)函數(shù)和運(yùn)算符的重載(4)類(lèi)繼承關(guān)系(5)虛函數(shù)8.1.6 在基類(lèi)中將一個(gè)成員函數(shù)說(shuō)明成虛函數(shù)后,在其派生類(lèi)中只要 (1) 、 (2) 和 (3) 完全一樣就認(rèn)為是虛函數(shù),而不必再加關(guān)鍵字 (4) 。如有任何不同,則認(rèn)為是 (5) 而不是虛函數(shù)。除了非成員函數(shù)不能作為虛函數(shù)外, (6) 、 (7) 和 (8) 也不能作為虛函數(shù)。答案:(1)同虛函數(shù)名(2)同參數(shù)表(3)同返回類(lèi)型。如基類(lèi)中返回基類(lèi)指針,而派生類(lèi)中返回派生類(lèi)指針是允許的(4)virtual(5)重載(6)靜態(tài)成員函數(shù)(7)內(nèi)聯(lián)函數(shù)(8)構(gòu)造函數(shù)8.1.7 純虛函數(shù)定義時(shí)在函數(shù)參數(shù)表后加 (1) ,它表明程序員對(duì)函數(shù) (2) ,其本質(zhì)是將指向函數(shù)體的指針定為 (3) 。答案:(1)=0(2)不定義(3)NULL8.2 簡(jiǎn)答題8.2.1 構(gòu)造函數(shù)和析構(gòu)函數(shù)可以繼承嗎?派生類(lèi)構(gòu)造函數(shù)各部分的執(zhí)行次序是怎樣的?答:構(gòu)造函數(shù)和析構(gòu)函數(shù)不可以繼承。派生類(lèi)構(gòu)造函數(shù)各部分的執(zhí)行次序是:1. 調(diào)用基類(lèi)構(gòu)造函數(shù),按它們?cè)谂缮?lèi)聲明的先后順序,依次調(diào)用。2. 調(diào)用新增成員對(duì)象的構(gòu)造函數(shù),按它們?cè)陬?lèi)定義中聲明的先后順序,依次調(diào)用。3. 派生類(lèi)的構(gòu)造函數(shù)體中的操作。8.2.2 什么叫派生類(lèi)的同名覆蓋(override)?答:如果派生類(lèi)聲明了一個(gè)和某個(gè)基類(lèi)成員同名的新成員(當(dāng)然如是成員函數(shù),參數(shù)表也必須一樣,否則是重載),派生類(lèi)中的新成員就屏蔽了基類(lèi)同名成員,類(lèi)似函數(shù)中的局部變量屏蔽全局變量。稱(chēng)為同名覆蓋(override)。8.2.3 派生類(lèi)的析構(gòu)函數(shù)中需完成什么任務(wù)?是否要編寫(xiě)對(duì)基數(shù)和成員對(duì)象的析構(gòu)函數(shù)的調(diào)用?為什么?答:析構(gòu)函數(shù)的功能是作善后工作,析構(gòu)函數(shù)無(wú)返回類(lèi)型也沒(méi)有參數(shù),情況比較簡(jiǎn)單。派生類(lèi)析構(gòu)函數(shù)定義格式與非派生類(lèi)無(wú)任何差異,不要編寫(xiě)對(duì)基數(shù)和成員對(duì)象的析構(gòu)函數(shù)的調(diào)用,只要在函數(shù)體內(nèi)把派生類(lèi)新增一般成員處理好就可以了,因?yàn)閷?duì)新增的成員對(duì)象和基類(lèi)的善后工作,系統(tǒng)會(huì)自己調(diào)用成員對(duì)象和基類(lèi)的析構(gòu)函數(shù)來(lái)完成。8.2.4 為什么要使用虛基類(lèi)?怎樣定義虛基類(lèi)?用一個(gè)實(shí)例來(lái)解釋虛基類(lèi)在其派生類(lèi)中的存儲(chǔ)方式。答:在多重繼承是有可能出現(xiàn)同一基類(lèi)的兩個(gè)拷貝,為避免這種情況,可使用虛基類(lèi)。虛基類(lèi)(virtual base class)定義方式如下:class 派生類(lèi)名:virtual 訪(fǎng)問(wèn)限定符 基類(lèi)類(lèi)名.;class 派生類(lèi)名:訪(fǎng)問(wèn)限定符 virtual 基類(lèi)類(lèi)名.;virtual 關(guān)鍵字只對(duì)緊隨其后的基類(lèi)名起作用。如下派生:存儲(chǔ)關(guān)系如(b),在職研究生類(lèi)有兩個(gè)Person拷貝。采用虛基類(lèi)后存儲(chǔ)關(guān)系如下: 采用虛基類(lèi)后在職研究生類(lèi)儲(chǔ)存圖StudentGStudentEGStudentPersonStudent新成員GStudent新成員PersonEmployee新成員Person成員EGStudent新成員PersonPersonEmployee在職研究生類(lèi)只有一個(gè)Person拷貝。8.2.5 簡(jiǎn)單敘述派生類(lèi)與基類(lèi)的賦值兼容規(guī)則。答:凡是基類(lèi)所能解決的問(wèn)題,公有派生類(lèi)都可以解決。在任何需要基類(lèi)對(duì)象的地方都可以用公有派生類(lèi)的對(duì)象來(lái)代替,這條規(guī)則稱(chēng)賦值兼容規(guī)則。它包括以下情況:1 派生類(lèi)的對(duì)象可以賦值給基類(lèi)的對(duì)象,這時(shí)是把派生類(lèi)對(duì)象中從對(duì)應(yīng)基類(lèi)中繼承來(lái)的成員賦值給基類(lèi)對(duì)象。反過(guò)來(lái)不行,因?yàn)榕缮?lèi)的新成員無(wú)值可賦。2 可以將一個(gè)派生類(lèi)的對(duì)象的地址賦給其基類(lèi)的指針變量,但只能通過(guò)這個(gè)指針訪(fǎng)問(wèn)派生類(lèi)中由基類(lèi)繼承來(lái)的成員,不能訪(fǎng)問(wèn)派生類(lèi)中的新成員。同樣也不能反過(guò)來(lái)做。3 派生類(lèi)對(duì)象可以初始化基類(lèi)的引用。引用是別名,但這個(gè)別名只能包含派生類(lèi)對(duì)象中的由基類(lèi)繼承來(lái)的成員。8.2.6 比較派生與模板各自的優(yōu)點(diǎn)。答:模板追求的是運(yùn)行效率,而派生追求的是編程的效率。通用性是模板庫(kù)的設(shè)計(jì)出發(fā)點(diǎn)之一,這是由泛型算法和函數(shù)對(duì)象等手段達(dá)到的。為了運(yùn)行的效率,類(lèi)模板是相互獨(dú)立的,即獨(dú)立設(shè)計(jì),沒(méi)有使用繼承的思想。對(duì)類(lèi)模板的擴(kuò)展是采用適配子(adapter)來(lái)完成的。應(yīng)該說(shuō)派生類(lèi)的目標(biāo)之一也是代碼的復(fù)用和程序的通用性,最典型的就是MFC,派生類(lèi)的優(yōu)點(diǎn)是可以由簡(jiǎn)到繁,逐步深入,程序編制過(guò)程中可以充分利用前面的工作,一步步完成一個(gè)復(fù)雜的任務(wù)。8.2.7 是否使用了虛函數(shù)就能實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性?怎樣才能實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性?答:不是。實(shí)現(xiàn)動(dòng)態(tài)多態(tài)性時(shí),必須使用基類(lèi)類(lèi)型的指針變量或引用,使該指針指向該基類(lèi)的不同派生類(lèi)的對(duì)象,并通過(guò)該指針指向虛函數(shù),才能實(shí)現(xiàn)動(dòng)態(tài)的多態(tài)性。8.2.8 為什么析構(gòu)函數(shù)總是要求說(shuō)明為虛函數(shù)?答:在基類(lèi)中及其派生類(lèi)中都動(dòng)態(tài)分配內(nèi)存空間時(shí),必須把析構(gòu)函數(shù)定義為虛函數(shù),實(shí)現(xiàn)撤消對(duì)象時(shí)的多態(tài)性。根據(jù)賦值兼容規(guī)則可以用基類(lèi)的指針指向派生類(lèi)對(duì)象,如果由該指針撤銷(xiāo)派生類(lèi)對(duì)象,則必須將析構(gòu)函數(shù)說(shuō)明為虛函數(shù),實(shí)現(xiàn)多態(tài)性,自動(dòng)調(diào)用派生類(lèi)析構(gòu)函數(shù)。我們總是要求將類(lèi)設(shè)計(jì)成通用的,無(wú)論其他程序員怎樣調(diào)用都必須保證不出錯(cuò),所以必須把析構(gòu)函數(shù)定義為虛函數(shù)。8.2.9 什么是抽象類(lèi)?含有純虛函數(shù)的類(lèi)是抽象類(lèi)嗎?答:若定義一個(gè)類(lèi),它只能用作基類(lèi)來(lái)派生出新的類(lèi),而不能用來(lái)定義對(duì)象,則稱(chēng)為抽象類(lèi)。含有純虛函數(shù)的類(lèi)是抽象類(lèi)。二. 編程與綜合練習(xí)題8.3 請(qǐng)用類(lèi)的派生方式來(lái)組織下列動(dòng)物實(shí)體與概念:動(dòng)物,脊椎動(dòng)物亞門(mén),節(jié)肢動(dòng)物門(mén),魚(yú)綱,鳥(niǎo)綱,爬行綱,哺乳綱,昆蟲(chóng)綱,鯊魚(yú),青魚(yú),海馬,鸚鵡,海鷗,喜鵲,蝙蝠,翼龍,蜻蜓,金龜,揚(yáng)子鱷,袋鼠,金絲猴,虎,蜈蚣,蜘蛛,蝗蟲(chóng),知了,螃蟹,蝦。解:動(dòng)物派生出:脊椎動(dòng)物亞門(mén)和節(jié)肢動(dòng)物門(mén)。脊椎動(dòng)物亞門(mén)派生出:魚(yú)綱,鳥(niǎo)綱,爬行綱,哺乳綱。魚(yú)綱派生出:鯊魚(yú),青魚(yú),海馬。鳥(niǎo)綱派生出:鸚鵡,海鷗,喜鵲。爬行綱派生出:翼龍,金龜,揚(yáng)子鱷。哺乳綱派生出:蝙蝠,袋鼠,金絲猴,虎。節(jié)肢動(dòng)物門(mén)派生出:昆蟲(chóng)綱,蜈蚣(多足綱),蜘蛛(蜘形綱),螃蟹,蝦(甲殼綱)。昆蟲(chóng)綱派生出:蜻蜓,蝗蟲(chóng),知了。8.4 定義商品類(lèi)及其多層的派生類(lèi)。以商品類(lèi)為基類(lèi)。第一層派生出服裝類(lèi)、家電類(lèi)、車(chē)輛類(lèi)。第二層派生出襯衣類(lèi)、外衣類(lèi)、帽子類(lèi)、鞋子類(lèi);空調(diào)類(lèi)、電視類(lèi)、音響類(lèi);自行車(chē)類(lèi)、轎車(chē)類(lèi)、摩托車(chē)類(lèi)。要求給出基本屬性和派生過(guò)程中增加的屬性。8.5 以點(diǎn)(point)類(lèi)為基類(lèi),重新定義矩形類(lèi)和圓類(lèi)。點(diǎn)為直角坐標(biāo)點(diǎn),矩形水平放置,由左下方的頂點(diǎn)和長(zhǎng)寬定義。圓由圓心和半徑定義。派生類(lèi)操作判斷任一坐標(biāo)點(diǎn)是在圖形內(nèi),還是在圖形的邊緣上,還是在圖形外。缺省初始化圖形退化為點(diǎn)。要求包括拷貝構(gòu)造函數(shù)。編程測(cè)試類(lèi)設(shè)計(jì)是否正確。8.6 幾何形體的派生關(guān)系如下:對(duì)平面形體有長(zhǎng)和面積,對(duì)立體有表面積和體積,對(duì)幾何圖形基類(lèi),周長(zhǎng)、面積和體積應(yīng)怎樣計(jì)算(用什么函數(shù))?對(duì)平面圖形體積怎樣計(jì)算(用什么函數(shù))?對(duì)立體圖形周長(zhǎng)怎么計(jì)算(用什么函數(shù))?要求實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性。請(qǐng)編程,并測(cè)試。8.7 某公司雇員(employee)包括經(jīng)理(manager),技術(shù)人員(technician)和銷(xiāo)售員(salesman)。開(kāi)發(fā)部經(jīng)理(developermanger),既是經(jīng)理也是技術(shù)人員。銷(xiāo)售部經(jīng)理(salesmanager),既是經(jīng)理也是銷(xiāo)售員。以employ類(lèi)為虛基類(lèi)派生出manager,technician和salesman類(lèi);再進(jìn)一步派生出developermanager和salesmanager類(lèi)。employee類(lèi)的屬性包括姓名、職工號(hào)、工資級(jí)別,月薪(實(shí)發(fā)基本工資加業(yè)績(jī)工資)。操作包括月薪計(jì)算函數(shù)(pay()),該函數(shù)要求輸入請(qǐng)假天數(shù),扣去應(yīng)扣工資后,得出實(shí)發(fā)基本工資。technician類(lèi)派生的屬性有每小時(shí)附加酬金和當(dāng)月工作時(shí)數(shù),及研究完成進(jìn)度系數(shù)。業(yè)績(jī)工資為三者之積。也包括同名的pay()函數(shù),工資總額為基本工資加業(yè)績(jī)工資。salesman類(lèi)派生的屬性有當(dāng)月銷(xiāo)售額和酬金提取百分比,業(yè)績(jī)工資為兩者之積。也包括同名的pay()函數(shù),工資總額為基本工資加業(yè)績(jī)工資。manager類(lèi)派生屬性有固定獎(jiǎng)金額和業(yè)績(jī)系數(shù),業(yè)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論