接口實(shí)現(xiàn)和繼承實(shí)現(xiàn)

接口實(shí)現(xiàn)和繼承實(shí)現(xiàn)

ID:13555992

大小:28.05 KB

頁(yè)數(shù):13頁(yè)

時(shí)間:2018-07-23

接口實(shí)現(xiàn)和繼承實(shí)現(xiàn)_第1頁(yè)
接口實(shí)現(xiàn)和繼承實(shí)現(xiàn)_第2頁(yè)
接口實(shí)現(xiàn)和繼承實(shí)現(xiàn)_第3頁(yè)
接口實(shí)現(xiàn)和繼承實(shí)現(xiàn)_第4頁(yè)
接口實(shí)現(xiàn)和繼承實(shí)現(xiàn)_第5頁(yè)
資源描述:

《接口實(shí)現(xiàn)和繼承實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、[C++]接口繼承與實(shí)現(xiàn)繼承?接口繼承與實(shí)現(xiàn)繼承所謂接口繼承,就是派生類只繼承函數(shù)的接口,也就是聲明;而實(shí)現(xiàn)繼承,就是派生類同時(shí)繼承函數(shù)的接口和實(shí)現(xiàn)。我們都很清楚C++中有幾個(gè)基本的概念,虛函數(shù)、純虛函數(shù)、非虛函數(shù)。虛函數(shù):虛函數(shù)是指一個(gè)類中你希望重載的成員函數(shù),當(dāng)你用一個(gè)基類指針或引用指向一個(gè)繼承類對(duì)象的時(shí)候,你調(diào)用一個(gè)虛函數(shù),實(shí)際調(diào)用的是繼承類的版本?!狹SDN虛函數(shù)用來表現(xiàn)基類和派生類的成員函數(shù)之間的一種關(guān)系.?虛函數(shù)的定義在基類中進(jìn)行,在需要定義為虛函數(shù)的成員函數(shù)的聲明前冠以關(guān)鍵字?virtual.?基類中的某個(gè)成

2、員函數(shù)被聲明為虛函數(shù)后,此虛函數(shù)就可以在一個(gè)或多個(gè)派生類中被重新定義.?在派生類中重新定義時(shí),其函數(shù)原型,包括返回類型,函數(shù)名,參數(shù)個(gè)數(shù),參數(shù)類型及參數(shù)的先后順序,都必須與基類中的原型完全相同.?虛函數(shù)是重載的一種表現(xiàn)形式,是一種動(dòng)態(tài)的重載方式.純虛函數(shù):純虛函數(shù)在基類中沒有定義,它們被初始化為0。?任何用純虛函數(shù)派生的類,都要自己提供該函數(shù)的具體實(shí)現(xiàn)。?定義純虛函數(shù)?virtualvoidfun(void)=0;非虛函數(shù):一般成員函數(shù),無virtual關(guān)鍵字修飾。?至于為什么要定義這些函數(shù),我們可以將虛函數(shù)、純虛函數(shù)和非虛

3、函數(shù)的功能與接口繼承與實(shí)現(xiàn)繼承聯(lián)系起來:聲明一個(gè)純虛函數(shù)(purevirtual)的目的是為了讓派生類只繼承函數(shù)接口,也就是上面說的接口繼承。純虛函數(shù)一般是在不方便具體實(shí)現(xiàn)此函數(shù)的情況下使用。也就是說基類無法為繼承類規(guī)定一個(gè)統(tǒng)一的缺省操作,但繼承類又必須含有這個(gè)函數(shù)接口,并對(duì)其分別實(shí)現(xiàn)。但是,在C++中,我們是可以為純虛函數(shù)提供定義的,只不過這種定義對(duì)繼承類來說沒有特定的意義。因?yàn)槔^承類仍然要根據(jù)各自需要實(shí)現(xiàn)函數(shù)。通俗說,純虛函數(shù)就是要求其繼承類必須含有該函數(shù)接口,并對(duì)其進(jìn)行實(shí)現(xiàn)。是對(duì)繼承類的一種接口實(shí)現(xiàn)要求,但并不提供缺省

4、操作,各個(gè)繼承類必須分別實(shí)現(xiàn)自己的操作。聲明非純虛函數(shù)(impurevirtual)的目的是讓繼承類繼承該函數(shù)的接口和缺省實(shí)現(xiàn)。與純虛函數(shù)唯一的不同就是其為繼承類提供了缺省操作,繼承類可以不實(shí)現(xiàn)自己的操作而采用基類提供的默認(rèn)操作。聲明非虛函數(shù)(non-virtual)的目的是為了令繼承類繼承函數(shù)接口及一份強(qiáng)制性實(shí)現(xiàn)。相對(duì)于虛函數(shù)來說,非虛函數(shù)對(duì)繼承類要求的更為嚴(yán)格,繼承類不僅要繼承函數(shù)接口,而且也要繼承函數(shù)實(shí)現(xiàn)。也就是為繼承類定義了一種行為。?總結(jié):純虛函數(shù):要求繼承類必須含有某個(gè)接口,并對(duì)接口函數(shù)實(shí)現(xiàn)。虛函數(shù):繼承類必須含

5、有某個(gè)接口,可以自己實(shí)現(xiàn),也可以不實(shí)現(xiàn),而采用基類定義的缺省實(shí)現(xiàn)。非虛函數(shù):繼承類必須含有某個(gè)接口,必須使用基類的實(shí)現(xiàn)。C++箴言:接口繼承和實(shí)現(xiàn)繼承 (public)inheritance這個(gè)表面上簡(jiǎn)單易懂的觀念,一旦被近距離審視,就會(huì)被證明是由兩個(gè)相互獨(dú)立的部分組成的:inheritanceoffunctioninterfaces(函數(shù)接口的繼承)和inheritanceoffunctionimplementations(函數(shù)實(shí)現(xiàn)的繼承)。這兩種inheritance之間的差異正好符合本書Introduction中論述的

6、functiondeclarations(函數(shù)聲明)和functiondefinitions(函數(shù)定義)之間的差異。?  作為一個(gè)class的設(shè)計(jì)者,有的時(shí)候你想要derivedclasses只繼承一個(gè)memberfunction的interface(declaration)。有的時(shí)候你想要derivedclasses既繼承interface(接口)也繼承implementation(實(shí)現(xiàn)),但你要允許它們替換他們繼承到的implementation。還有的時(shí)候你想要derivedclasses繼承一個(gè)函數(shù)的interfac

7、e(接口)和implementation(實(shí)現(xiàn)),而不允許它們替換任何東西。?  為了更好地感覺這些選擇之間的不同之處,考慮一個(gè)在圖形應(yīng)用程序中表示幾何圖形的classhierarchy(類繼承體系):?  classShape{?  public:?  virtualvoiddraw()const=0;?  virtualvoiderror(conststd::string&msg);?  intobjectID()const;?  ...?  };?  classRectangle:publicShape{...};? 

8、 classEllipse:publicShape{...};?  Shape是一個(gè)abstractclass(抽象類),它的purevirtualfunction(純虛擬函數(shù))表明了這一點(diǎn)。作為結(jié)果,客戶不能創(chuàng)建Shapeclass的實(shí)例,只能創(chuàng)建從它繼承的classes的實(shí)例。但是,S

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。