版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1. 之所以成通過繼承而相關(guān)聯(lián)的類型為多態(tài)類型,是因?yàn)樵S多情 況下可以互換地使用派生類型或基類型的許多形態(tài)。 在 c+ 中, 多態(tài)性僅應(yīng)用于通過繼承而相關(guān)聯(lián)的 類型的引用或指針。 2. 在 C+ 中,通過基類的引用(或指針)調(diào)用虛函數(shù)時(shí),發(fā) 生動(dòng)態(tài)綁定 。引用(或指針)既可以指向基類對象也可以指 向派生類對象 ,這一事實(shí)是動(dòng)態(tài)綁定的關(guān)鍵。用引用(或指 針)調(diào)用的虛函數(shù)在運(yùn)行時(shí)確定,被調(diào)用的函數(shù)是引用(或 指針)所指對象的實(shí)際類型所定義的。 3. 基類要定義虛析構(gòu)函數(shù) 4. 除了構(gòu)造函數(shù)以外任意非 static 函數(shù)都可以是虛函數(shù)。派生 類不能訪問基類的 private 成員。 Protecte
2、d 成員能被派生 類的成員函數(shù)訪問不能被友元訪問 。 5. 派生類中虛函數(shù)的聲明必須與基類中的定義方式完全匹配,但 有一個(gè)例外:返回對基類型的引用(指針)的虛函數(shù), 派生類 中的虛函數(shù)可以返回基類函數(shù)所返回類型的派生類的引用(指 針)。 6. 動(dòng)態(tài)綁定的兩個(gè)條件: 1 虛函數(shù) 2 用基類的引用或者指針進(jìn) 行調(diào)用。 只有成員函數(shù) 中的代碼才能通過作用域操作符覆蓋 虛函數(shù)機(jī)制。 覆蓋很多時(shí)候因?yàn)楹芏嗯缮愐韧瓿苫惏?本中的工作再額外完成其他工作。 派生類版本的虛函數(shù)調(diào)用 基類版本時(shí)必須指定作用域, 不然會遞歸! 7. 在同一虛函數(shù)的基類版本和派生版本中使用不同的默認(rèn)實(shí)參幾 乎一定會引起麻煩。如
3、果通過引用或者指針調(diào)用虛函數(shù),但在 實(shí)際執(zhí)行的是派生類中定義的版本,這時(shí)就肯能會出現(xiàn)問題。 此時(shí),為虛函數(shù)的基類版本定義的默認(rèn)實(shí)參將傳給派生類定義 的版本,而派生類版本是用不同的默認(rèn)實(shí)參定義的。 8. 每個(gè)類控制它所定義的成員的訪問。派生類可以進(jìn)一步限制 但不能放松對繼承的成員的訪問。訪問列表中的訪問標(biāo)號決 定。 公有繼承:基類的成員保持原有的屬性。 保護(hù)繼承: 基類的非私有成員均為保護(hù)成員。私有繼承:基類的非私有 成員均為私有??梢栽谂缮愔惺褂?using 命令(在 public 里聲明 using abc:size 可以把 size 恢復(fù)成 public )使得它 重新變?yōu)楣?/ 保護(hù)
4、,關(guān)鍵在于訪問級別。 Class 默認(rèn)私有繼 承, struct 默認(rèn)公有繼承 9. 友元不會被繼承。不管怎么繼承 static 成員只有一個(gè)實(shí)例,如 果在基類里面是 private 則不會被訪問。 10. 訪問方式: 1 基類:成員名。 2 派生類:成員名 3 對象 引用指針 4 直接用成員名 11. 派生類的引用和指針到基類可以自動(dòng)轉(zhuǎn)換;反過來沒有自動(dòng)轉(zhuǎn) 換。嚴(yán)格來說對象沒有轉(zhuǎn)換,但是可以用派生類的對象來初始 化和賦值基類對象。將派生類的對象傳遞給希望接受基類引用 的函數(shù),實(shí)際上式傳遞引用,對象沒有變。如果將它傳遞給接 受對象的函數(shù),則復(fù)制基類部分。對派生類對基類對象進(jìn)行初 始化復(fù)制:1
5、顯示定義復(fù)制構(gòu)造函數(shù) 2 定義構(gòu)造函數(shù) / 復(fù)制操作 符 ;以上方法并不常見, 基類一般確定自己的賦值操作符和構(gòu)造 函數(shù)(傳遞 const 引用,大家都可以用)注意:訪問標(biāo)號。 用 base 指針指向 derived 對象,再用此指針給另外 derived 指 針賦值需要顯示強(qiáng)制類型轉(zhuǎn)換。 12. 派生類的默認(rèn)構(gòu)造函數(shù)將調(diào)用基類的構(gòu)造函數(shù) 。如果派生類 顯示定義自己的復(fù)制構(gòu)造函數(shù)或復(fù)制操作符, 則該定義將完 全覆蓋默認(rèn)定義 。被繼承類的復(fù)制構(gòu)造函數(shù)和賦值操作符負(fù) 責(zé)對基類成分及類自己的成員進(jìn)行復(fù)制或復(fù)制。 如果派生類 定義了自己的復(fù)制構(gòu)造函數(shù),該函數(shù)一般 顯示使用基類復(fù)制 構(gòu)造函數(shù)初始化基類部
6、分 ,如果不這樣做很可能用默認(rèn)構(gòu)造 函數(shù)初始化基類部分。 賦值操作符首先確保避免自身賦值, 然后調(diào)用基類的賦值操作符。 13. class Bulk_item : public Item_base public: Bulk_item( const std:string& book, double sales_price , 在派生類構(gòu)造函數(shù)參數(shù)列表中不能直接初始化基 類(設(shè)置默認(rèn)參數(shù) ) std:size_t qty = 0, double disc_rate = 0.0): Item_base(book, sales_price), 可以把基類 包含在初始化列表中,將參數(shù)傳遞給基類構(gòu)
7、造函數(shù) min _qty(qty), disco un t(disc_rate) ; 14. 尊重基類接口,在派生類中使用接口,不要直接在構(gòu)造函數(shù) 中對基類成員賦值 15. 每個(gè)析構(gòu)函數(shù)負(fù)責(zé)刪除自己的成員。如果在構(gòu)造函數(shù)或析構(gòu)函 數(shù)中調(diào)用虛函數(shù),則運(yùn)行的是為構(gòu)造函數(shù)或析構(gòu)函數(shù)自身類型 定義的版本。(在基類的構(gòu)造函數(shù)或析構(gòu)函數(shù)中調(diào)用的虛函數(shù) 是該函數(shù)的基類版本) 16. 基類一定要有虛的析構(gòu)函數(shù),因?yàn)榭赡軙h除指向派生類的 基類指針。 17與基類同名的派生類成員將屏蔽對基類成員的直接訪問,如果 需要訪問基類成員需要用作用域標(biāo)示符。盡量避免使用同名的 成員。函數(shù)也會屏蔽即使原型不同。 想要在派生類
8、中重新定義 在基類中重載過的函數(shù)的一個(gè)特殊版本,用 using 把函數(shù)名復(fù) 制過來,再重載特殊版本。 18.函數(shù)調(diào)用過程: .首先確定進(jìn)行函數(shù)調(diào)用的對象、引用或指針的靜態(tài)類型。 *再該類型中查找函數(shù),如果找不到,就在直接基類中查找, 如此遵循著類的繼承往上找,知道找到該函數(shù)或者查找完最 后一個(gè)類。如果不能在類或其相關(guān)基類中找到該類的名字, 則調(diào)用錯(cuò)誤的。 一旦找到了該名字,就進(jìn)行常規(guī)的類型檢查,查看如果給定找 到的定義,該函數(shù)調(diào)用是否合法。 .假定函數(shù)調(diào)用合法,編譯器就生成代碼。如果函數(shù)是虛函數(shù) 且通過引用或指針調(diào)用,則編譯器生成代碼以確定根據(jù)對象 的動(dòng)態(tài)類型運(yùn)行哪個(gè)函數(shù)版本,否則,直接生成代
9、碼調(diào)用函 數(shù)。 1. 虛函數(shù)的重定義要求參數(shù)列表一致(可以默認(rèn)形參不同,對對 象的 con st 不同(后面),返回值相同(例外是基類返回基類 的指針或引用,派生類返回派生類的指針或引用)。 含有一 個(gè)或多個(gè)純虛函數(shù)的類是抽象基類,不能創(chuàng)建對象。 2. 句柄:是封裝了指向?qū)ο蠛椭赶蛴?jì)數(shù)器指針的類,它綁定對 象以后可以幫助對象完成后臺的操作。代碼使用句柄將不用 管理對象的指針,但是仍然可以獲得通過 Sales_item 對象 進(jìn)行的調(diào)用的虛行為。在一個(gè)類中封裝了其他類需要 tyepdef 其類成員比便用戶使用。 3. class Sales_item public: / default con
10、structor: unbound han dle Sales_item(): p(0), use (new std:size_t(1) / attaches a han dle to a copy of the Item_base object Sales_item(c onst Item_base&); / copy control members to manage the use count and pointers Sales_item(const Sales_item &i): p(i.p), use(i.use) +*use; Sales_item() decr_
11、use(); Sales_item& operator=(const Sales_item&); / member access operators const Item_base *operator-() const if (p) return p; else throw std:logic_error(unbound Sales_item); 重截 - 可以讓智能指針直接訪問對象成員 const Item_base &operator*() const if (p) return *p; else throw std:logic_error(unbound Sales_item); private: Item_base *p; / pointer to shared item std:size_t *use; / pointer to shared use count / called by both destructor and assignment operator to free pointers v
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度行政合同行政主體特權(quán)在緊急情況下的適用合同4篇
- 2025版小學(xué)操場運(yùn)動(dòng)設(shè)施更新與維修合同3篇
- 體育會展客戶關(guān)系管理考核試卷
- 光纖通信在智能電網(wǎng)故障診斷中的應(yīng)用考核試卷
- 2025年土地轉(zhuǎn)讓合同
- 2025版停車場消防設(shè)施建設(shè)與維護(hù)服務(wù)合同3篇
- 2025版木工材料研發(fā)與勞務(wù)合作合同范本3篇
- 2025年寫作創(chuàng)作分期付款合同
- 2025年加盟代理合約協(xié)議
- 2025年家庭矛盾仲裁協(xié)議
- 油氣行業(yè)人才需求預(yù)測-洞察分析
- 《數(shù)據(jù)采集技術(shù)》課件-Scrapy 框架的基本操作
- 2025年河北省單招語文模擬測試二(原卷版)
- 高一化學(xué)《活潑的金屬單質(zhì)-鈉》分層練習(xí)含答案解析
- DB34∕T 4010-2021 水利工程外觀質(zhì)量評定規(guī)程
- 理論力學(xué)智慧樹知到期末考試答案章節(jié)答案2024年中國石油大學(xué)(華東)
- 2024老年人靜脈血栓栓塞癥防治中國專家共識(完整版)
- 四年級上冊脫式計(jì)算100題及答案
- 上海市12校2023-2024學(xué)年高考生物一模試卷含解析
- 儲能電站火災(zāi)應(yīng)急預(yù)案演練
- 人教版(新插圖)二年級下冊數(shù)學(xué) 第4課時(shí)用“進(jìn)一法”和“去尾法”解決簡單的實(shí)際問題 教學(xué)課件
評論
0/150
提交評論