




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C箴言:接口繼承和實現(xiàn)繼承public:virtualvoid draw() const = 0;virtualvoid error(const std:stringint objectID() const;virtual;class Rectangle: public Shape . . ;class Ellipse: public Shape . . ;Shape 是一個 abstract class 抽象類,它的 pure virtualfunction 純虛擬函數(shù)說明了這一點。作為結(jié)果,客戶不能創(chuàng)立Shapeclass的實例,只能創(chuàng)立從它繼承的classes的實例。但是,Shape對全
2、部從它公有繼承的類施加了特別強大的影響,由于成員函數(shù)interfaces are always inherited。就像Item 32 解釋的,public inheritance意味著is-a,所以對一個base class來說成立的任何東西,對于它的derived classes也必需成立。因此,假如一個函數(shù)適用于一個class,它也肯定適用于它的derived classes。Shape class中聲明白三個函數(shù)。第一個,draw,在一個明確的顯示設(shè)備上畫出當(dāng)前對象。其次個,error,假如member functions需要報告一個錯誤,就調(diào)用它。第三個,objectID,返回當(dāng)前對
3、象的整型標(biāo)識符。每一個函數(shù)都用不同的方式聲明:draw是一個pure virtual function純虛擬函數(shù);error 是一個simple impure? virtual function 簡潔虛擬函數(shù);而objectID是一個non-virtual function非虛擬函數(shù)。這些不同的聲明示意了什么呢?考慮第一個pure virtual function 純虛擬函數(shù)draw:class Shape public:virtual void draw const = 0;. ;pure virtual functions 純虛擬函數(shù)的兩個最顯著的特性是它們必需被任何繼承它們的詳細類重新聲
4、明,和抽象類中一般沒有它們的定義。把這兩個特性加在一起,你應(yīng)當(dāng)熟悉到。聲明一個pure virtual function純虛擬函數(shù)的目的是使derivedclasses 繼承一個函數(shù)interface only。這就使Shape:draw function具有了完整的意義,由于它要求全部的Shape對象必需能夠畫出來是合情合理的,但是Shape class本身不能為這個函數(shù)供應(yīng)一個符合情理的缺省的實現(xiàn)。例如,畫一個橢圓的算法和畫一個矩形的算法是特別不同的,Shape:draw的聲明告知詳細derived classes的設(shè)計者:你必需供應(yīng)一個draw function,但是我對于你如何實現(xiàn)它不
5、發(fā)表意見。順便提一句,為一個pure virtual function (純虛擬函數(shù))供應(yīng)一個定義是有可能的。也就是說,你可以為Shape:draw供應(yīng)一個實現(xiàn),而C也不會埋怨什么,但是調(diào)用它的方法是用class name限定修飾這個調(diào)用:Shape *ps = new Shape; / error! Shape is abstractShape *ps1 = new Rectangle; / fineps1-draw(); / calls Rectangle:drawShape *ps2 = new Ellipse; / fineps2-draw(); / calls Ellipse:dra
6、wps1-Shape:draw(); / calls Shape:drawps2-Shape:draw(); / calls Shape:draw除了幫忙你在雞尾酒會上給同行程序員留下印象外,這個特性通常沒什么用處,然而,就像下面你將看到的,它能用來作為一個“為simple(impure) virtual functions 供應(yīng)一個 safer-than-usual 的實現(xiàn) 的機制。simple virtual functions 背后的故事和 pure virtuals 有一點不同。derived classes照常還是繼承函數(shù)的interface ,但是simplevirtual fun
7、ctions供應(yīng)了一個可以被derived classes 替換的實現(xiàn)。假如你為此考慮一陣兒,你就會熟悉到聲明一個 simple virtual function 的目的是讓 derived classes繼承一個函數(shù)interface as well as a default implementation o考慮Shape: :error 的狀況:class Shape public:virtual void errorconst std:string. ;interface要求每一個class必需支持一個在遭受到錯誤時被調(diào)用的函數(shù),但是每一個class可以自由地用它覺得適宜的任何方法處理錯
8、誤。假如一個class不需要做什么特殊的事情,它可以僅僅求助于Shapeclass中供應(yīng)的錯誤處理的缺省版本。也就是說,Shape:error的聲明告知derived classes 的設(shè)計者:你應(yīng)當(dāng)支持一個error function ,但假如你不想自己寫,你可以求助Shape class中的缺省版本。結(jié)果是:允許simple virtual functions既指定一個函數(shù)接口又指定一個缺省實現(xiàn)是危急的。來看一下為什么,考慮一個XYZ航空公司的飛機的hierarchy 繼承體系XYZ只有兩種飛機,Model A和Model B,它們都嚴格地根據(jù)同樣的方法飛行。于是,XYZ設(shè)計如下hiera
9、rchy 繼承體系:class Airport . . ; / represents airportsclass Airplane public:virtual void fly(const Airport. ;void Airplane:fly(const Airport destination)default code for flying an airplane to the given destinationclass ModelA: public Airplane . . ;class ModelB: public Airplane . . ;為了表述全部的飛機必需支持一個fly函數(shù)
10、,并為了 “不同機型可能(在理論上)需要不同的對fly的實現(xiàn)的事實,Airplane:fly被聲明為virtual。然而,為了避開在ModelA 和ModelB classes中些重復(fù)的代碼,缺省的飛行行為由Airplane:fly的函數(shù)體供應(yīng),供ModelA和ModelB繼承。這是一個經(jīng)典的object-oriented 設(shè)計。由于兩個classes 共享一個通用特性它們實現(xiàn)fly的方法,所以這個通用特性就被轉(zhuǎn)移到一個base class之中,并由兩個classes來繼承這個特性。這個設(shè)計使得通用特性變得清晰明白,避開了代碼重復(fù),提升了將來的可擴展性,簡化了長期的維護 由于object-oriented技術(shù),全部這些東西都受到很高的追捧。XYZ航空公司應(yīng)當(dāng)引以為榮。現(xiàn)在,假設(shè)XYZ公司的財寶增長了,打算引進一種新機型,Model C。Model C在某些方面與Model A和Model B
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025購車合同需要注意的問題
- 長期供貨白灰合同協(xié)議
- 震動安置協(xié)議書范本
- 門窗建材工程合同協(xié)議
- 2025制衣廠生產(chǎn)合作合同范本
- 順豐速運加盟合同協(xié)議
- 項目采購消防閥門合同協(xié)議
- 風(fēng)管機空調(diào)清洗合同協(xié)議
- 院子水毀工程合同協(xié)議
- 食堂承包居間合同協(xié)議
- 2025年福建省福州市電子信息集團有限公司招聘30人筆試參考題庫附帶答案詳解
- 校園景觀場所解讀課件
- 北師版九年級數(shù)學(xué)上冊-第1章-特殊平行四邊形中的旋轉(zhuǎn)、最值、動點問題-專題訓(xùn)練-(含答案)
- 2023山東能源集團建工集團有限公司機關(guān)部分崗位公開招聘8人筆試參考題庫附帶答案詳解
- 2024年漢中市中醫(yī)醫(yī)院招聘筆試真題
- 超低排放改造管理制度
- 近視的防控課件
- 智能調(diào)度算法設(shè)計-全面剖析
- 超星爾雅學(xué)習(xí)通《工科中的設(shè)計思維(廣東技術(shù)師范大學(xué))》2025章節(jié)測試附答案
- 儲能電站安全教育培訓(xùn)
- 景區(qū)游客中心培訓(xùn)課件
評論
0/150
提交評論