《C++Primer》4第四部分學(xué)習(xí)筆記匯總_面向?qū)ο缶幊膛c泛型編程(15至16章)_第1頁(yè)
《C++Primer》4第四部分學(xué)習(xí)筆記匯總_面向?qū)ο缶幊膛c泛型編程(15至16章)_第2頁(yè)
《C++Primer》4第四部分學(xué)習(xí)筆記匯總_面向?qū)ο缶幊膛c泛型編程(15至16章)_第3頁(yè)
《C++Primer》4第四部分學(xué)習(xí)筆記匯總_面向?qū)ο缶幊膛c泛型編程(15至16章)_第4頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、 C+ Primer第四部分學(xué)習(xí)筆記匯總面向?qū)ο缶幊膛c泛型編程繼承,動(dòng)態(tài)綁定,數(shù)據(jù)抽象,函數(shù)模板 C+ Primer 第 15 章學(xué)習(xí)筆記第 15 章:面向?qū)ο缶幊堂嫦驅(qū)ο缶幊袒谌齻€(gè)基本概念:數(shù)據(jù)抽象,繼承,動(dòng)態(tài)綁定。用類進(jìn)行數(shù)據(jù)抽象用類派生從一個(gè)類繼承另一個(gè)類:派生類繼承基類成員;動(dòng)態(tài)綁定使編譯器能夠在運(yùn)行時(shí)決定是使用基類中定義的函數(shù)還是派生類中定義的函數(shù)。學(xué)習(xí)摘錄162:繼承與動(dòng)態(tài)綁定的作用:能夠容易地定義與其他類相似但又不相同的新類,能夠更容易地編寫忽略這些相似類型之間區(qū)別的程序。學(xué)習(xí)摘錄163:多態(tài)性面向?qū)ο缶幊痰年P(guān)鍵思想是多態(tài)性(polymorphism )繼承而相關(guān)聯(lián)的類型為多態(tài)

2、類型。學(xué)習(xí)摘錄164:繼承派生類( derived class)能夠繼承基類( base class)定義的成員派生類可以無(wú)須改變而使用那些與派生類型具體特性不相關(guān)的操作派生類可以重定義那些與派生類型相關(guān)的成員函數(shù),將函數(shù)特化,考慮派生類型的特性。在 C+中,基類必須指出希望派生類重定義哪些函數(shù), 定義為 virtual 的函數(shù)是基類期待派生類重新定義的,基類希望派生類繼承的函數(shù)不能定義為虛函數(shù)。學(xué)習(xí)摘錄 165:動(dòng)態(tài)綁定( dynamic binding )我們能夠編寫程序使用繼承層次中任意類型的對(duì)象,無(wú)須關(guān)心對(duì)象的具體類型。學(xué)習(xí)摘錄166:protected 成員可以認(rèn)為protected

3、 訪問(wèn)標(biāo)號(hào)是private 和 public 的混合: 1. 像 private 成員一樣, protected 成員不能被類的用戶訪問(wèn)。 2. 像 public 成員一樣, protected 成員可被該類的派生類訪問(wèn)。派生類只能通過(guò)派生類對(duì)象訪問(wèn)其基類的protected 成員,派生類對(duì)其基類類型對(duì)象的protected 成員沒(méi)有特殊訪問(wèn)權(quán)限。學(xué)習(xí)摘錄167:派生類類型接口簡(jiǎn)單地說(shuō):提供給派生類型接口是protected成員和 public 成員的集合。學(xué)習(xí)摘錄168:派生類為了定義派生類,使用類派生列表(class derivation list )指定基類。 class classna

4、me: access-label base-class這里的access-label 是 public 、 protected 或 private, base -class 是已定義的類的名字。學(xué)習(xí)摘錄169:派生類和虛函數(shù)一旦函數(shù)在基類中聲明為虛函數(shù),它就一直為虛函數(shù),派生類無(wú)法改變?cè)摵瘮?shù)為虛函數(shù)這一事實(shí)。派生類重定義虛函數(shù)時(shí),可以使用virtual 保留字,但不是必須這樣做。學(xué)習(xí)摘錄170:virtual 與其他成員函數(shù) C+函數(shù)默認(rèn)不使用動(dòng)態(tài)綁定。要觸發(fā)動(dòng)態(tài)綁定,必須滿足兩個(gè)條件:第一,要將成員函數(shù)指定為虛函數(shù)。 (默認(rèn)的成員函數(shù)都是非虛函數(shù))第二,要通過(guò)基類類型的引用或指針進(jìn)行函數(shù)調(diào)用

5、。學(xué)習(xí)摘錄171:靜態(tài)類型與動(dòng)態(tài)類型的概念靜態(tài)類型(static type )在編譯時(shí)可知的引用類型或指針類型。動(dòng)態(tài)類型(dynamic type )指針或引用所綁定的對(duì)象的類型,這是僅在運(yùn)行時(shí)可知的。學(xué)習(xí)摘錄172:C+中的多態(tài)性引用和指針的靜態(tài)類型與動(dòng)態(tài)類型可以不同,這是C+用以支持多態(tài)性的基石。學(xué)習(xí)摘錄173:派生類函數(shù)調(diào)用基類版本只有成員函數(shù)中的代碼才應(yīng)該使用作用域操作符覆蓋虛函數(shù)機(jī)制。覆蓋虛函數(shù)機(jī)制,最常見(jiàn)的理由是為了派生類虛函數(shù)調(diào)用基類中的版本。派生類虛函數(shù)調(diào)用基類版本時(shí),必須顯式使用作用域操作符。如果派生類函數(shù)忽略了這樣做,則函數(shù)調(diào)用會(huì)在運(yùn)行時(shí)確定并且將是一個(gè)自身調(diào)用,從而導(dǎo)致無(wú)

6、窮遞歸。學(xué)習(xí)摘錄174:繼承與組合定義一作為另一個(gè)類的公用派生類時(shí),派生類應(yīng)反映與基類的“是一種(在書店的例子中, 基類表示按規(guī)定價(jià)格銷售的書的概念, Bulk_itemIs A)”關(guān)系。是一種書, 但具有不同的定價(jià)策略。類型之間另一種常見(jiàn)的關(guān)系是稱為“有一個(gè)(Has A)”的關(guān)系。書店的例子的類具有價(jià)格和ISBN.學(xué)習(xí)摘錄175:友元關(guān)系與繼承基類或派生類可以使其他類或函數(shù)成為友元。友元可以訪問(wèn)類的private 和 protected 數(shù)據(jù)。友元關(guān)系不能繼承。學(xué)習(xí)摘錄176:轉(zhuǎn)換與繼承每個(gè)派生類對(duì)象包含一個(gè)基類部分。可以將派生類對(duì)象的引用轉(zhuǎn)換為基類子對(duì)象的引用,對(duì)指針也類似。沒(méi)有從基類引用

7、(或基類指針)到派生類引用(或派生類指針)的(自動(dòng))轉(zhuǎn)換。沒(méi)有從派生類型對(duì)象到基類類型對(duì)象的直接轉(zhuǎn)換。第四節(jié):構(gòu)造函數(shù)和復(fù)制控制構(gòu)造函數(shù)和復(fù)制控制成員不能繼承,每個(gè)類定義自己的構(gòu)造函數(shù)和復(fù)制控制成員。學(xué)習(xí)摘錄 177:合成的派生類默認(rèn)構(gòu)造函數(shù)派生類的合成默認(rèn)構(gòu)造函數(shù)與非派生的構(gòu)造函數(shù)只有一點(diǎn)不同:除了初始化派生類的數(shù)據(jù)成員外,還要初始化派生類對(duì)象的基類部分?;惒糠钟苫惖哪J(rèn)構(gòu)函數(shù)初始化。學(xué)習(xí)摘錄178:派生類的構(gòu)造次序構(gòu)造函數(shù)初始化列表為類的基類和成員提供初始值,它并不指定初始化的執(zhí)行次序。首先初始化基類,然后根據(jù)聲明次序初始化派生類的成員。學(xué)習(xí)摘錄179:只能初始化直接基類一個(gè)類只能初始

8、化自己的直接基類。(直接基類就是在派生列表中指定的類。)如果類從類派生,類從類派生,那是的直接基類。學(xué)習(xí)摘錄180:重構(gòu)( refactioring )重構(gòu)包括重新定義類層次,將操作和/ 或數(shù)據(jù)從一個(gè)類移到另一個(gè)類。為了適應(yīng)應(yīng)用程序的需要而重新設(shè)計(jì)類以便增加新函數(shù)或處理其他改變時(shí),最有可能需要進(jìn)行重構(gòu)。然而,對(duì)類進(jìn)行重構(gòu),或以任意其他方式改變類,使用這些類的任意代碼都必須重新編譯。學(xué)習(xí)摘錄181:尊重基類接口構(gòu)造函數(shù)只能初始化其直接基類的原因是每個(gè)類都定義了自己的接口。一旦定義了自己的接口,與該類對(duì)象的所有交互都應(yīng)該通過(guò)接口。學(xué)習(xí)摘錄182:定義派生類復(fù)制構(gòu)造函數(shù)如果派生類顯式定義自己的復(fù)制構(gòu)

9、造函數(shù)或賦值操作符,則該定義將完全覆蓋默認(rèn)定義。被繼承類的復(fù)制構(gòu)造函數(shù)和賦值操作符負(fù)責(zé)對(duì)基類成分以及類自己的成員進(jìn)行復(fù)制或賦值。學(xué)習(xí)摘錄183:派生類析構(gòu)函數(shù)析構(gòu)函數(shù)的工作與復(fù)制構(gòu)函數(shù)和賦值操作符不同:派生類析構(gòu)函數(shù)不負(fù)責(zé)撤銷基類對(duì)象的成員。每個(gè)析構(gòu)函數(shù)只負(fù)責(zé)清除自已的成員,對(duì)象的撤銷順序與構(gòu)造順序相反:首先運(yùn)行派生類析構(gòu)函數(shù),然后按繼承層次依次向上調(diào)用各基類析造函數(shù)。如果析構(gòu)函數(shù)為虛函,那么通過(guò)指針調(diào)用時(shí),運(yùn)行哪個(gè)析構(gòu)函數(shù)將因指針?biāo)笇?duì)象類型的不同而不同。即使析構(gòu)函數(shù)沒(méi)有工作要做,繼承層次的根類也應(yīng)該定義一個(gè)虛件構(gòu)函數(shù)。學(xué)習(xí)摘錄184:構(gòu)造函數(shù)和賦值操作符不是虛函數(shù)在復(fù)制控制成員中,只有析構(gòu)

10、函數(shù)應(yīng)定義為虛函數(shù),構(gòu)造函數(shù)不能定義為虛函數(shù)。將類的賦值操作符設(shè)為虛函數(shù)很有可能會(huì)令人混淆,而且不會(huì)有什么好處。第五節(jié):繼承情況下的類作用域在繼承情況下,派生類的作用域嵌套在基類作用域中。如果不能在派生類作用域中確定名字,就在外圍基類作用域查找該名字的定義。學(xué)習(xí)摘錄185:名字沖突與繼承與基類成員同名的派生類成員將屏蔽對(duì)基類成員的直接訪問(wèn)。可以使用作用域操作符訪問(wèn)被屏蔽的基類成員。學(xué)習(xí)摘錄186:純虛函數(shù)instantiate )了函數(shù)模板的一個(gè)實(shí)例。含有(或繼承)一個(gè)或多個(gè)純虛函數(shù)的類是抽象基類(abstract base class)。除了作為抽象基類的派生類的對(duì)象的組成部分,不能創(chuàng)建抽象

11、類型的對(duì)象。學(xué)習(xí)摘錄187:容器與繼承因?yàn)榕缮悓?duì)象在賦值給基類對(duì)象時(shí)會(huì)被“切掉”,所以容器與通過(guò)繼承相關(guān)的類型不能很好地融合。第八節(jié):句柄類與繼承 C+中面向?qū)ο缶幊讨幸粋€(gè)頗具諷刺意味的地方是,不能使用對(duì)象支持面對(duì)對(duì)象編程,相反,必須使用指針或引用。學(xué)習(xí)摘錄188:定義包裝類和句柄類 C+中一個(gè)通用的技術(shù)是定義包裝( cover)類或句柄( handle)類。句柄類,存儲(chǔ)和管理基類指針。指針?biāo)笇?duì)象的類型可以變化,它既可以指向基類類型對(duì)象又可以指向派生類型對(duì)象。學(xué)習(xí)摘錄189:包裝了繼承層次的句柄有兩個(gè)重要的設(shè)計(jì)考慮因素: 1. 像對(duì)任何保存指針的類一樣,必須確定對(duì)復(fù)制控制做些什么。 2.

12、句柄類決定句柄接口屏蔽還是不屏蔽層次,如果不屏蔽層次,用戶必須了解和使用基本層次中的對(duì)象。 C+ Primer 第 16 章學(xué)習(xí)筆記第 16 章:模板與泛型編程泛型編程,就是以獨(dú)立于任何特定類型的方式編寫代碼。使用泛型程序時(shí),我們需要提供具體程序?qū)嵗僮鞯念愋突蛑?。學(xué)習(xí)摘錄190:補(bǔ)充概念:多態(tài)性面向?qū)ο缶幊趟蕾嚨亩鄳B(tài)性稱為運(yùn)行時(shí)多態(tài)性。泛型編程所依賴的多態(tài)稱為編譯時(shí)多態(tài)性或參數(shù)式多態(tài)性。學(xué)習(xí)摘錄191:定義函數(shù)模板函數(shù)模板(functiontemplate )是一個(gè)獨(dú)立于類型的函數(shù),可作為一種方式,產(chǎn)生函數(shù)的特定類型的版本。模板定義以關(guān)鍵字template 開始,后接模板形參表(temp

13、late parameter list )。模板形參表是用尖括號(hào)括住的一個(gè)或多個(gè)模板形參(template parameter )的列表。模板形參表不能為空。學(xué)習(xí)摘錄192:使用函數(shù)模板實(shí)例化產(chǎn)生模板的特定類型的過(guò)程稱為實(shí)例化。要進(jìn)行實(shí)例化,編譯器必須能夠訪問(wèn)定義模板的源代碼。使用函數(shù)模板時(shí),編譯器會(huì)推斷哪個(gè)模板實(shí)參綁定到模板形參。一旦編譯器確定了實(shí)際的模板實(shí)參,就稱它為實(shí)例化(學(xué)習(xí)摘錄193:typename 與 class 的區(qū)別在函數(shù)模板形參中,關(guān)鍵字typename 和 class 相同含義,可互用,只有有時(shí)候typename 比 class 要直觀。學(xué)習(xí)摘錄194:鏈接時(shí)的編譯時(shí)錯(cuò)誤

14、編譯模板時(shí),編譯器可能會(huì)在三個(gè)階段中標(biāo)識(shí)錯(cuò)誤: 1. 第一階段是編譯模板定義本身時(shí)。普通的語(yǔ)法錯(cuò)誤類的。 2. 第二階段時(shí)在編譯器見(jiàn)到模板的使用時(shí),檢查實(shí)參與形參是否相對(duì)映。 3. 第三階段是在實(shí)例化時(shí),只有在這個(gè)時(shí)候可以發(fā)現(xiàn)類型相關(guān)的錯(cuò)誤。學(xué)習(xí)摘錄195:類模板中的友元聲明 1. 普通非模板類或函數(shù)的友元聲明,將友元關(guān)系授予明確指定的類或函數(shù)。 2. 類模板或函數(shù)模板的友元聲明,授予對(duì)友元所有實(shí)例的訪問(wèn)權(quán)。 3. 只授予對(duì)類模板或函數(shù)模板的特定實(shí)例的訪問(wèn)權(quán)的友元聲明。如:template<typename Type> class Bar/ grants access to ord

15、inary, nontemplate class and function friend class FooBar;friend void fcn(); FooBar 的成員和fcn 函數(shù)可以訪問(wèn)Bar 類任意實(shí)例的private 成員和 protected 成員。摘錄有想 195:假如類要在類中使用,那么,要在類中對(duì)進(jìn)行友元聲明。友元聲明不是在需要使用類時(shí)才聲明調(diào)用,而是在需要使用到的類中先聲明。學(xué)習(xí)摘錄196:成員模板任意類(模板或非模板)可以擁有本身為類模板或函數(shù)模板的成員,這種成員稱為成員模板(membertemplate ),成員模板不能為虛。第六節(jié):模板特化模板特化是指一個(gè)或多個(gè)模

16、板形參的實(shí)際類型或?qū)嶋H值是指定的。學(xué)習(xí)摘錄197:模板特化轉(zhuǎn)換方式 template <> int compare <const char*> (const char* const & v1, const char* const &v2);當(dāng)調(diào)用compare 函數(shù)的時(shí)候,傳給它兩個(gè)字符指針,編譯器將調(diào)用特化版本。學(xué)習(xí)摘錄198:普通作用域規(guī)則適用于特化當(dāng)編譯器看到一個(gè)函數(shù)調(diào)用時(shí),它必須知道這個(gè)版本需要特化,否則,編譯器可能從模板定義實(shí)例化該函數(shù)。對(duì)于具有同一模板實(shí)參集的同一模板,程序不能既有顯式特化又有實(shí)例化。學(xué)習(xí)摘錄199:顯式模板實(shí)參顯式模板實(shí)參使我們能固定一個(gè)或多個(gè)模板形參的類型或值。顯式實(shí)參使我們能夠設(shè)計(jì)無(wú)需從對(duì)應(yīng)實(shí)參推斷模板類型的函數(shù),也使我們能夠?qū)?shí)參進(jìn)行轉(zhuǎn)換。學(xué)習(xí)摘

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論