《面向?qū)ο蟪绦蛟O(shè)計(jì)》.ppt
《《面向?qū)ο蟪绦蛟O(shè)計(jì)》.ppt》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《《面向?qū)ο蟪绦蛟O(shè)計(jì)》.ppt(36頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
面向?qū)ο蟪绦蛟O(shè)計(jì)理論篇 武漢大學(xué) 資源與環(huán)境科學(xué)學(xué)院 地理信息科學(xué)系 教材及參考資料 面向?qū)ο蟮睦碚撆cC 實(shí)踐 王燕編著清華大學(xué)出版社 By 任福博士Email renfu Room 7 501 第十一章 繼承與類(lèi)的派生 要設(shè)計(jì)可重用性模塊 任何方法都必須面對(duì)重復(fù)和差別 為了避免一再地重寫(xiě)同樣的代碼 引入不一致的錯(cuò)誤 就必須進(jìn)行抽象 抽象出一般特性后 還需在此基礎(chǔ)上擴(kuò)充其特殊的功能 使之能表達(dá)具體的事物 繼承是軟件重用的一種形式 實(shí)現(xiàn)這種形式的方法是從現(xiàn)有類(lèi)建立新類(lèi) 新類(lèi)繼承了現(xiàn)有類(lèi)的屬性和行為 并且為了使新類(lèi)具有自己所需要的功能 新類(lèi)還要對(duì)這些屬性和行為予以修飾 青出于藍(lán)而勝于藍(lán) 11 派生類(lèi)的概念 第十一章 繼承與類(lèi)的派生 繼承是對(duì)象類(lèi)之間的一種相交關(guān)系 是派生關(guān)系 具有以下性質(zhì) 1 類(lèi)間的共享特性 2 類(lèi)間的細(xì)微區(qū)別 3 類(lèi)間的層次結(jié)構(gòu) 在建立一個(gè)新類(lèi)時(shí) 程序員可以讓新類(lèi)繼承預(yù)定義基類(lèi)的數(shù)據(jù)成員和成員函數(shù) 這種新類(lèi)稱(chēng)為派生類(lèi) 派生類(lèi)本身也可能成為未來(lái)派生類(lèi)的基類(lèi) 對(duì)于單重繼承 派生類(lèi)只有一個(gè)基類(lèi) 對(duì)于多重繼承 派生類(lèi)通常是從多個(gè)基類(lèi)派生出來(lái)的 這些基類(lèi)之間可能毫無(wú)關(guān)系 派生類(lèi)通常添加了它自己的數(shù)據(jù)成員和成員函數(shù) 因而通常比基類(lèi)大的多 派生類(lèi)比基類(lèi)更具體 它代表了一組外延較小的對(duì)象 對(duì)于單重繼承 派生類(lèi)和基類(lèi)有相同的起源 繼承的真正魅力在于能夠添加基類(lèi)所沒(méi)有的特點(diǎn)及取代和改進(jìn)從基類(lèi)繼承來(lái)的特點(diǎn) 11 為什么使用繼承 第十一章 繼承與類(lèi)的派生 繼承的目的在于為代碼重用提供有效手段 可以重用先前項(xiàng)目的代碼 如果原來(lái)的代碼不滿(mǎn)足要求 還可以做少量修改 某個(gè)項(xiàng)目使用了幾個(gè)非常相似或稍有不同的類(lèi) 就可以通過(guò)派生類(lèi)的繼承性達(dá)到函數(shù)和數(shù)據(jù)繼承的目的 繼承最具有吸引力的特點(diǎn)是新類(lèi)可以從現(xiàn)有的類(lèi)庫(kù)中繼承 項(xiàng)目開(kāi)發(fā)者可以開(kāi)發(fā)出自己的類(lèi)庫(kù) 基于這種觀點(diǎn) 將來(lái)有一天 軟件也可以象當(dāng)今的硬件一樣用標(biāo)準(zhǔn)的可重用組件進(jìn)行構(gòu)造 11 派生類(lèi)的定義 第十一章 繼承與類(lèi)的派生 派生類(lèi)具有的特征 新的類(lèi)可在基類(lèi)所提供的基礎(chǔ)上包含新的成員 在新的類(lèi)中可隱藏基類(lèi)的任何函數(shù)成員 可為新的類(lèi)重新定義函數(shù) 定義格式 Class 派生類(lèi)名 繼承方式 基類(lèi)名 派生類(lèi)新定義成員 其中 繼承方式 常使用如下三種關(guān)鍵字給予表示 public表示公有基類(lèi)private表示私有基類(lèi) 可以省略protected表示保護(hù)基類(lèi) 11 派生類(lèi)對(duì)基類(lèi)成員的訪(fǎng)問(wèn)權(quán) 第十一章 繼承與類(lèi)的派生 派生類(lèi)并不是對(duì)基類(lèi)中的所有成員都可以無(wú)條件的進(jìn)行訪(fǎng)問(wèn)對(duì)于基類(lèi)的私有成員 派生類(lèi)及派生類(lèi)的使用者都無(wú)權(quán)訪(fǎng)問(wèn) 對(duì)于基類(lèi)的公有成員的訪(fǎng)問(wèn)權(quán) 在定義派生類(lèi)時(shí) 定義的方式不同 權(quán)限也不同 11 派生類(lèi)對(duì)基類(lèi)成員的訪(fǎng)問(wèn)權(quán) 第十一章 繼承與類(lèi)的派生 私有派生 私有派生類(lèi)對(duì)基類(lèi)的公有成員只能是私有繼承 也即基類(lèi)的所有公有成員都只能成為私有派生類(lèi)的私有成員 這些私有成員只能被派生類(lèi)的成員函數(shù)訪(fǎng)問(wèn) 而派生類(lèi)的使用者無(wú)權(quán)訪(fǎng)問(wèn) 若希望基類(lèi)中某些公有成員在派生類(lèi)中也是公有的 使得派生類(lèi)的使用者能夠使用它 則可以在派生類(lèi)的公有段中說(shuō)明這些成員 并在成員名前綴上 類(lèi)名 有幾個(gè)成員需要成為派生類(lèi)的公有成員 在派生類(lèi)中分別給出類(lèi)似的定義 舉例見(jiàn)教材P169 170 11 派生類(lèi)對(duì)基類(lèi)成員的訪(fǎng)問(wèn)權(quán) 第十一章 繼承與類(lèi)的派生 2 公有派生 公有派生的意義是基類(lèi)中所有的公有成員在派生類(lèi)中也都是公有的 這就省去了每個(gè)成員均要在派生類(lèi)中聲明才能變?yōu)楣械墓ぷ?基類(lèi)的公有成員保持原有的狀態(tài) 舉例見(jiàn)教材P170 11 派生類(lèi)對(duì)基類(lèi)成員的訪(fǎng)問(wèn)權(quán) 第十一章 繼承與類(lèi)的派生 示意圖 舉例見(jiàn)教材P171 172 173 classbase private public classderive1 base private public classderive2 publicderive1 private public 11 派生類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù) 第十一章 繼承與類(lèi)的派生 1 派生類(lèi)構(gòu)造函數(shù) 我們已知道 派生類(lèi)的對(duì)象的數(shù)據(jù)結(jié)構(gòu)是由基類(lèi)中說(shuō)明的數(shù)據(jù)成員和派生類(lèi)中說(shuō)明的數(shù)據(jù)成員共同構(gòu)成 將派生類(lèi)的對(duì)象中由基類(lèi)中說(shuō)明的數(shù)據(jù)成員和操作所構(gòu)成的封裝體稱(chēng)為基類(lèi)子對(duì)象 它由基類(lèi)中的構(gòu)造函數(shù)進(jìn)行初始化 構(gòu)造函數(shù)不能夠被繼承 因此 派生類(lèi)的構(gòu)造函數(shù)必須通過(guò)調(diào)用基類(lèi)的構(gòu)造函數(shù)來(lái)初始化基類(lèi)子對(duì)象 所以 在定義派生類(lèi)的構(gòu)造函數(shù)時(shí)除了對(duì)自己的數(shù)據(jù)成員進(jìn)行初始化外 還必須負(fù)責(zé)調(diào)用基類(lèi)構(gòu)造函數(shù)使基類(lèi)數(shù)據(jù)成員得以初始化 如果派生類(lèi)中還有子對(duì)象時(shí) 還應(yīng)包含對(duì)子對(duì)象初始化的構(gòu)造函數(shù) 11 派生類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù) 第十一章 繼承與類(lèi)的派生 1 派生類(lèi)構(gòu)造函數(shù) 派生類(lèi)構(gòu)造函數(shù)的一般格式如下 參數(shù)表1 舉例見(jiàn)教材P176 11 派生類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù) 第十一章 繼承與類(lèi)的派生 1 派生類(lèi)構(gòu)造函數(shù) 在下面兩種情況下 必須定義派生類(lèi)的構(gòu)造函數(shù) 派生類(lèi)本身需要構(gòu)造函數(shù) 定義派生類(lèi)對(duì)象時(shí) 其相應(yīng)的基類(lèi)對(duì)象需調(diào)用帶有參數(shù)的構(gòu)造函數(shù) 可以不定義派生類(lèi)構(gòu)造函數(shù)的情況 若基類(lèi)使用缺省構(gòu)造函數(shù)或不帶參數(shù)的構(gòu)造函數(shù) 在派生類(lèi)定義構(gòu)造函數(shù)時(shí) 可以省略基類(lèi) 構(gòu)造函數(shù) 變?cè)?在此情況下 若派生類(lèi)不需要初始化 則可以不定義派生類(lèi)構(gòu)造函數(shù) 執(zhí)行順序是 先祖先 基類(lèi) 再客人 對(duì)象成員 后自己 派生類(lèi) 11 派生類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù) 第十一章 繼承與類(lèi)的派生 派生類(lèi)析構(gòu)函數(shù) 在派生類(lèi)中是否要定義析構(gòu)函數(shù)與基類(lèi)無(wú)關(guān) 各自獨(dú)立執(zhí)行 若基類(lèi) 成員類(lèi) 派生類(lèi)均有析構(gòu)函數(shù) 在執(zhí)行時(shí)的順序剛好與構(gòu)造函數(shù)的順序相反 即 派生類(lèi) 成員類(lèi) 基類(lèi) 執(zhí)行順序是 先自己 派生類(lèi) 再客人 對(duì)象成員 后祖先 基類(lèi) 11 派生類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù) 第十一章 繼承與類(lèi)的派生 帶有構(gòu)造函數(shù)和析構(gòu)函數(shù)的類(lèi)的派生類(lèi)舉例 舉例 舉例 派生類(lèi)與基類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù)調(diào)用順序 舉例見(jiàn)教材P177 178 11 派生類(lèi)對(duì)基類(lèi)成員的繼承 第十一章 繼承與類(lèi)的派生 焦點(diǎn) 如何來(lái)調(diào)整派生類(lèi)的訪(fǎng)問(wèn)權(quán)限 11 如何訪(fǎng)問(wèn)基類(lèi)私有成員 第十一章 繼承與類(lèi)的派生 不管私有派生還是公有派生 派生類(lèi)無(wú)權(quán)訪(fǎng)問(wèn)基類(lèi)私有成員 只有通過(guò)基類(lèi)提供的公有函數(shù) 接口 進(jìn)行訪(fǎng)問(wèn) 為達(dá)到直接訪(fǎng)問(wèn)可以采用以下兩種方式 增加保護(hù)段聲明友元 11 如何訪(fǎng)問(wèn)基類(lèi)私有成員 第十一章 繼承與類(lèi)的派生 在類(lèi)定義體中增加保護(hù)段 關(guān)鍵字 protected將基類(lèi)私有成員中需提供給派生類(lèi)訪(fǎng)問(wèn)的部分定義為保護(hù)段成員 保護(hù)段成員可以被它的派生類(lèi)訪(fǎng)問(wèn) 但是對(duì)于外界是隱藏起來(lái)的 即 就這個(gè)類(lèi)的用戶(hù)而言 它是private的 但它可被從這個(gè)類(lèi)繼承來(lái)的任何來(lái)使用 派生類(lèi)對(duì)于保護(hù)段成員的繼承與公有段成員的繼承很相似 分以下兩種情況 公有派生 基類(lèi)的保護(hù)成員在派生類(lèi)中處于保護(hù)成員 私有派生 基類(lèi)的保護(hù)成員在派生類(lèi)中處于私有成員 舉例見(jiàn)教材P184 11 如何訪(fǎng)問(wèn)基類(lèi)私有成員 第十一章 繼承與類(lèi)的派生 將需要訪(fǎng)問(wèn)基類(lèi)私有成員的派生類(lèi)成員函數(shù)聲明為基類(lèi)的友元 基類(lèi)的保護(hù)段成員可以通過(guò)一定的處理 連續(xù)的公有派生 使其成為對(duì)外界開(kāi)放的 將待訪(fǎng)問(wèn)的派生類(lèi)中的成員函數(shù)說(shuō)明是基類(lèi)的友元 這樣派生類(lèi)中的其他成員函數(shù)都無(wú)權(quán)訪(fǎng)問(wèn)它 外界不可能通過(guò)派生新類(lèi)來(lái)達(dá)到訪(fǎng)問(wèn)基類(lèi)私有成員的目的 如果想讓派生類(lèi)中的所有成員函數(shù)均有權(quán)訪(fǎng)問(wèn)基類(lèi)的私有成員 可以將整個(gè)派生類(lèi)聲明為基類(lèi)的友元 11 通過(guò)訪(fǎng)問(wèn)聲明調(diào)整訪(fǎng)問(wèn)域 第十一章 繼承與類(lèi)的派生 訪(fǎng)問(wèn)聲明用來(lái)改變到派生類(lèi)中變?yōu)樗接械幕?lèi)公有成員的訪(fǎng)問(wèn)域 它遵循以下規(guī)則 1 訪(fǎng)問(wèn)聲明僅僅調(diào)整名字的訪(fǎng)問(wèn) 不可以為它說(shuō)明任何類(lèi)型 若名字為成員函數(shù) 在訪(fǎng)問(wèn)聲明時(shí)也不準(zhǔn)說(shuō)明任何參數(shù) 2 訪(fǎng)問(wèn)聲明只能調(diào)整基類(lèi)的保護(hù)段和公有段成員在派生類(lèi)中的訪(fǎng)問(wèn)域 不能改變基類(lèi)的私有成員在派生中的訪(fǎng)問(wèn)域 任何試圖這樣的操作都是非法的 3 訪(fǎng)問(wèn)聲明僅用于在派生類(lèi)中調(diào)整名字的訪(fǎng)問(wèn)權(quán)限 不允許在派生類(lèi)中降低或提升基類(lèi)成員的可訪(fǎng)問(wèn)性 4 對(duì)重載函數(shù)名的訪(fǎng)問(wèn)聲明將調(diào)整基類(lèi)中具有該名的所有函數(shù)的訪(fǎng)問(wèn)域 處于不同段也不可以 5 若在派生類(lèi)中具有與基類(lèi)中同名的函數(shù) 則基類(lèi)中的此函數(shù)不允許在派生類(lèi)中進(jìn)行訪(fǎng)問(wèn)聲明 舉例見(jiàn)教材P191 192 193 11 不同繼承方式的基類(lèi)和派生類(lèi)的特性 第十一章 繼承與類(lèi)的派生 11 不同繼承方式的基類(lèi)和派生類(lèi)的特性 第十一章 繼承與類(lèi)的派生 為了進(jìn)一步理解三種不同的繼承方式在其成員的可見(jiàn)性方面的區(qū)別 下面從三種不同角度進(jìn)行討論 對(duì)于公有繼承方式 1 基類(lèi)成員對(duì)其對(duì)象的可見(jiàn)性 公有成員可見(jiàn) 其他不可見(jiàn) 這里保護(hù)成員同于私有成員 2 基類(lèi)成員對(duì)派生類(lèi)的可見(jiàn)性 公有成員和保護(hù)成員可見(jiàn) 而私有成員不可見(jiàn) 這里保護(hù)成員同于公有成員 3 基類(lèi)成員對(duì)派生類(lèi)對(duì)象的可見(jiàn)性 公有成員可見(jiàn) 其他成員不可見(jiàn) 所以 在公有繼承時(shí) 派生類(lèi)的對(duì)象可以訪(fǎng)問(wèn)基類(lèi)中的公有成員 派生類(lèi)的成員函數(shù)可以訪(fǎng)問(wèn)基類(lèi)中的公有成員和保護(hù)成員 這里 一定要區(qū)分清楚派生類(lèi)的對(duì)象和派生類(lèi)中的成員函數(shù)對(duì)基類(lèi)的訪(fǎng)問(wèn)是不同的 11 不同繼承方式的基類(lèi)和派生類(lèi)的特性 第十一章 繼承與類(lèi)的派生 為了進(jìn)一步理解三種不同的繼承方式在其成員的可見(jiàn)性方面的區(qū)別 下面從三種不同角度進(jìn)行討論 對(duì)于私有繼承方式 1 基類(lèi)成員對(duì)其對(duì)象的可見(jiàn)性 公有成員可見(jiàn) 其他成員不可見(jiàn) 2 基類(lèi)成員對(duì)派生類(lèi)的可見(jiàn)性 公有成員和保護(hù)成員是可見(jiàn)的 而私有成員是不可見(jiàn)的 3 基類(lèi)成員對(duì)派生類(lèi)對(duì)象的可見(jiàn)性 所有成員都是不可見(jiàn)的 所以 在私有繼承時(shí) 基類(lèi)的成員只能由直接派生類(lèi)訪(fǎng)問(wèn) 而無(wú)法再往下繼承 11 不同繼承方式的基類(lèi)和派生類(lèi)的特性 第十一章 繼承與類(lèi)的派生 為了進(jìn)一步理解三種不同的繼承方式在其成員的可見(jiàn)性方面的區(qū)別 下面從三種不同角度進(jìn)行討論 對(duì)于保護(hù)繼承方式 這種繼承方式與私有繼承方式的情況相同 兩者的區(qū)別僅在于對(duì)派生類(lèi)的成員而言 對(duì)基類(lèi)成員有不同的可見(jiàn)性 11 多繼承 第十一章 繼承與類(lèi)的派生 在解決實(shí)際問(wèn)題時(shí) 某個(gè)類(lèi)也許具有多個(gè)類(lèi)所具有的特點(diǎn) 因此 引入多繼承機(jī)制 11 多繼承的概念 第十一章 繼承與類(lèi)的派生 多繼承可以看作是單繼承的擴(kuò)展 所謂多繼承是指派生類(lèi)具有多個(gè)基類(lèi) 派生類(lèi)與每個(gè)基類(lèi)之間的關(guān)系仍可看作是一個(gè)單繼承 11 多繼承的定義 第十一章 繼承與類(lèi)的派生 多繼承下派生類(lèi)的定義格式如下 class 其中 是三種繼承方式 public private protected之一 注意 在多重繼承中 公有派生和私有派生對(duì)于基類(lèi)成員在派生類(lèi)中的可訪(fǎng)問(wèn)性與單繼承的規(guī)則相同 舉例見(jiàn)教材P195 11 多繼承的構(gòu)造函數(shù)和析構(gòu)函數(shù) 第十一章 繼承與類(lèi)的派生 在多繼承的情況下 派生類(lèi)的構(gòu)造函數(shù)格式如下 其中 中各個(gè)參數(shù)包含了其后的各個(gè)分參數(shù)表 注意 多繼承下派生類(lèi)的構(gòu)造函數(shù)與單繼承下派生類(lèi)構(gòu)造函數(shù)相似 它必須同時(shí)負(fù)責(zé)該派生類(lèi)所有基類(lèi)構(gòu)造函數(shù)的調(diào)用 同時(shí) 派生類(lèi)的參數(shù)個(gè)數(shù)必須包含完成所有基類(lèi)初始化所需的參數(shù)個(gè)數(shù) 構(gòu)造函數(shù)的定義 舉例見(jiàn)教材P197 11 多繼承的構(gòu)造函數(shù)和析構(gòu)函數(shù) 第十一章 繼承與類(lèi)的派生 構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行順序 派生類(lèi)構(gòu)造函數(shù)執(zhí)行順序是先執(zhí)行所有基類(lèi)的構(gòu)造函數(shù) 再執(zhí)行派生類(lèi)本身構(gòu)造函數(shù) 處于同一層次的各基類(lèi)構(gòu)造函數(shù)的執(zhí)行順序取決于定義派生類(lèi)時(shí)所指定的各基類(lèi)順序 與派生類(lèi)構(gòu)造函數(shù)中所定義的成員初始化列表的各項(xiàng)順序無(wú)關(guān) 也就是說(shuō) 執(zhí)行基類(lèi)構(gòu)造函數(shù)的順序取決于定義派生類(lèi)時(shí)基類(lèi)的順序 可見(jiàn) 派生類(lèi)構(gòu)造函數(shù)的成員初始化列表中各項(xiàng)順序可以任意地排列 析構(gòu)函數(shù)的執(zhí)行順序正好相反 11 虛基類(lèi) 第十一章 繼承與類(lèi)的派生 為什么要使用虛基類(lèi) 理由 合并基類(lèi)的副本 虛基類(lèi) virtual其中 virtual是虛類(lèi)的關(guān)鍵字 虛基類(lèi)的說(shuō)明是用在定義派生類(lèi)時(shí) 寫(xiě)在派生類(lèi)名的后面 一個(gè)基類(lèi) 在定義它的派生類(lèi)時(shí) 在作為某些派生類(lèi)的虛基類(lèi)的同時(shí) 又作為另一些派生類(lèi)的非虛基類(lèi) 這種情況是允許的 例如 classx virtualpublicb classy virtualpublicb classz publicb classaa publicx publicy publicz 11 虛基類(lèi) 第十一章 繼承與類(lèi)的派生 虛基類(lèi)的概念 11 虛基類(lèi) 第十一章 繼承與類(lèi)的派生 虛基類(lèi)的初始化 虛基類(lèi)的初始化與一般的多繼承的初始化在語(yǔ)法上是一樣的 但構(gòu)造函數(shù)的調(diào)用次序不同 原則如下 虛基類(lèi)的構(gòu)造函數(shù)在非虛基類(lèi)之前調(diào)用 若同一層次中包含多個(gè)虛基類(lèi) 這些基類(lèi)的構(gòu)造函數(shù)按它們說(shuō)明的次序調(diào)用 若虛基類(lèi)由非虛基類(lèi)派生而來(lái) 則仍然先調(diào)用基類(lèi)構(gòu)造函數(shù) 再調(diào)用派生類(lèi)的構(gòu)造函數(shù) 虛基類(lèi)只允許定義不帶參數(shù)的或帶缺省參數(shù)的構(gòu)造函數(shù) 舉例見(jiàn)教材P207 11 基類(lèi)與派生類(lèi)的關(guān)系 第十一章 繼承與類(lèi)的派生 任何一個(gè)類(lèi)都可以派生出一個(gè)新類(lèi) 派生類(lèi)也可以再派生出新類(lèi) 因此 基類(lèi)和派生類(lèi)是相對(duì)而言的 基類(lèi)與派生類(lèi)之間的關(guān)系可以有如下幾種描述 1 派生類(lèi)是基類(lèi)的具體化類(lèi)的層次通常反映了客觀世界中某種真實(shí)的模型 在這種情況下 不難看出 基類(lèi)是對(duì)若干個(gè)派生類(lèi)的抽象 而派生類(lèi)是基類(lèi)的具體化 基類(lèi)抽取了它的派生類(lèi)的公共特征 而派生類(lèi)通過(guò)增加行為將抽象類(lèi)變?yōu)槟撤N有用的類(lèi)型 2 派生類(lèi)是基類(lèi)定義的延續(xù)先定義一個(gè)抽象基類(lèi) 該基類(lèi)中有些操作并未實(shí)現(xiàn) 然后定義非抽象的派生類(lèi) 實(shí)現(xiàn)抽象基類(lèi)中定義的操作 例如 虛函數(shù)就屬此類(lèi)情況 這時(shí) 派生類(lèi)是抽象的基類(lèi)的實(shí)現(xiàn) 即可看成是基類(lèi)定義的延續(xù) 這也是派生類(lèi)的一種常用方法 11 基類(lèi)與派生類(lèi)的關(guān)系 第十一章 繼承與類(lèi)的派生 任何一個(gè)類(lèi)都可以派生出一個(gè)新類(lèi) 派生類(lèi)也可以再派生出新類(lèi) 因此 基類(lèi)和派生類(lèi)是相對(duì)而言的 基類(lèi)與派生類(lèi)之間的關(guān)系可以有如下幾種描述 3 派生類(lèi)是基類(lèi)的組合在多繼承時(shí) 一個(gè)派生類(lèi)有多于一個(gè)的基類(lèi) 這時(shí)派生類(lèi)將是所有基類(lèi)行為的組合 派生類(lèi)將其本身與基類(lèi)區(qū)別開(kāi)來(lái)的方法是添加數(shù)據(jù)成員和成員函數(shù) 因此 繼承的機(jī)制將使得在創(chuàng)建新類(lèi)時(shí) 只需說(shuō)明新類(lèi)與已有類(lèi)的區(qū)別 從而大量原有的程序代碼都可以復(fù)用 所以有人稱(chēng)類(lèi)是 可復(fù)用的軟件構(gòu)件 11 繼承使用的注意事項(xiàng) 第十一章 繼承與類(lèi)的派生 對(duì)于 程序而言 設(shè)計(jì)孤立的類(lèi)是比較容易的 難的是正確設(shè)計(jì)基類(lèi)及派生類(lèi) 避免 不吃白不吃 如果 類(lèi)和 類(lèi)毫不相關(guān) 不可以為了使 的功能更多而讓 繼承 的功能和屬性 如果在邏輯上 是 的 一種 并且 的所有功能和屬性對(duì) 都有意義 則允許 繼承 的功能和屬性 避免 母雞下鴨蛋 若在邏輯上 是 的一部分 則不允許 從 派生 而是要用 和其他東西組合 整體 部分 關(guān)系 成 例如頭與眼 鼻 耳 口等的關(guān)系 總結(jié) 第十一章 繼承與類(lèi)的派生 繼承的幾種方式及特點(diǎn)類(lèi)繼承的構(gòu)造和析構(gòu)函數(shù)虛基類(lèi)的涵義繼承的應(yīng)用 11 派生類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù) 第十一章 繼承與類(lèi)的派生 classB publicA public B b 0 cout 類(lèi)B的缺省構(gòu)造函數(shù) n B inti intj intk B cout 類(lèi)B的析構(gòu)函數(shù) n voidPrint private intb Aaa includeclassA public A a 0 cout 類(lèi)A的缺省構(gòu)造函數(shù) n A inti a i cout 類(lèi)A的構(gòu)造函數(shù) n A cout 類(lèi)A的析構(gòu)函數(shù) n voidPrint const cout A intGeta reutrna private inta B B inti intj intk A i aa j b k cout 類(lèi)B的構(gòu)造函數(shù) n voidB Print A Print cout B AA GETA ENDL voidmain Bbb 2 bb 0 B 1 2 5 bb 1 B 3 4 7 for inti 0 i 2 i bb i Print 返回- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 面向?qū)ο蟪绦蛟O(shè)計(jì) 面向 對(duì)象 程序設(shè)計(jì)
鏈接地址:http://ioszen.com/p-8695644.html