




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
零點起飛學C之靈活的代碼-多態(tài)目錄CONTENCT多態(tài)基本概念與原理函數(shù)重載實現(xiàn)多態(tài)虛函數(shù)與純虛函數(shù)實現(xiàn)多態(tài)類繼承關(guān)系中的多態(tài)現(xiàn)象模板編程與泛型編程中的多態(tài)總結(jié)回顧與拓展延伸01多態(tài)基本概念與原理定義作用多態(tài)定義及作用多態(tài)是面向?qū)ο蟪绦蛟O(shè)計中的一個重要特征,它允許我們使用父類類型的指針或引用來調(diào)用子類對象的方法,從而實現(xiàn)代碼的靈活性和可擴展性。多態(tài)可以提高代碼的可讀性和可維護性,降低代碼的耦合度,使得程序更加易于擴展和修改。同時,多態(tài)也是實現(xiàn)設(shè)計模式的基礎(chǔ)之一,如工廠模式、策略模式等。繼承方法重寫父類引用指向子類對象多態(tài)必須建立在繼承的基礎(chǔ)上,子類繼承父類的方法并重寫或?qū)崿F(xiàn)新的方法。子類必須重寫父類的方法,使得子類的方法與父類的方法具有相同的方法名和參數(shù)列表,但具有不同的實現(xiàn)。在程序中,必須使用父類類型的引用或指針來指向子類對象,才能調(diào)用子類的方法實現(xiàn)多態(tài)。實現(xiàn)多態(tài)的條件也稱為靜態(tài)多態(tài)或早期綁定,是指在編譯時期就能確定方法調(diào)用的具體實現(xiàn)。編譯時多態(tài)主要通過方法重載和模板實現(xiàn)。編譯時多態(tài)也稱為動態(tài)多態(tài)或晚期綁定,是指在程序運行時期才能確定方法調(diào)用的具體實現(xiàn)。運行時多態(tài)主要通過方法重寫和接口實現(xiàn)。在Java中,運行時多態(tài)通過虛方法表和接口表來實現(xiàn)。當一個父類引用指向一個子類對象時,如果調(diào)用的是被子類重寫的方法,那么JVM會通過虛方法表找到子類的方法實現(xiàn)進行調(diào)用。運行時多態(tài)編譯時多態(tài)與運行時多態(tài)02函數(shù)重載實現(xiàn)多態(tài)函數(shù)名相同,參數(shù)列表不同函數(shù)重載原理編譯器根據(jù)參數(shù)類型和數(shù)量的不同來區(qū)分不同的函數(shù)。編譯時多態(tài)函數(shù)重載在編譯時就已經(jīng)確定,因此也稱為編譯時多態(tài)。函數(shù)重載的實現(xiàn)是通過靜態(tài)綁定完成的,即在編譯階段就已經(jīng)將函數(shù)調(diào)用與函數(shù)體進行綁定。靜態(tài)綁定80%80%100%示例:運算符重載實現(xiàn)多態(tài)通過重新定義運算符的行為,使其可以作用于自定義數(shù)據(jù)類型。在類中定義與運算符對應(yīng)的成員函數(shù)或非成員函數(shù),以實現(xiàn)運算符的重載。通過運算符重載實現(xiàn)兩個自定義類型的對象的加法運算。運算符重載定義實現(xiàn)方式示例代碼注意事項與優(yōu)缺點分析避免二義性在函數(shù)重載時要確保每個函數(shù)的參數(shù)列表具有獨特性,以避免出現(xiàn)二義性。保持一致性在重載運算符時要保持其行為的一致性,不要改變運算符原有的語義??紤]性能:雖然函數(shù)重載可以提高代碼的靈活性和可讀性,但過多的重載可能會影響程序的性能。注意事項與優(yōu)缺點分析通過函數(shù)重載可以使用相同的函數(shù)名來表示不同的功能,使代碼更加簡潔易讀。提高代碼的可讀性和可維護性通過函數(shù)重載可以避免編寫大量相似的函數(shù),提高代碼的復(fù)用率。實現(xiàn)代碼的復(fù)用注意事項與優(yōu)缺點分析注意事項與優(yōu)缺點分析支持多態(tài)性:函數(shù)重載是實現(xiàn)多態(tài)的一種方式,可以提高程序的靈活性和可擴展性。VS由于函數(shù)重載需要在編譯時進行類型檢查和匹配,因此可能會增加編譯器的負擔和編譯時間??赡芤l(fā)二義性如果函數(shù)重載不當或參數(shù)類型相似,可能會引發(fā)二義性,導(dǎo)致編譯錯誤或運行異常。可能增加編譯器的負擔注意事項與優(yōu)缺點分析03虛函數(shù)與純虛函數(shù)實現(xiàn)多態(tài)虛函數(shù)定義虛函數(shù)使用動態(tài)綁定虛函數(shù)定義及使用在派生類中,可以重寫基類的虛函數(shù),以實現(xiàn)多態(tài)行為。當通過基類指針或引用調(diào)用該函數(shù)時,將根據(jù)實際對象類型調(diào)用相應(yīng)的函數(shù)。虛函數(shù)的實現(xiàn)依賴于動態(tài)綁定機制,即在運行時確定調(diào)用哪個函數(shù)。這要求使用基類指針或引用訪問派生類對象。在基類中,使用關(guān)鍵字`virtual`修飾的成員函數(shù)稱為虛函數(shù)。純虛函數(shù)及抽象類概念純虛函數(shù)必須在派生類中被重寫,而虛函數(shù)可以不被重寫。抽象類不能實例化,而非抽象類可以。純虛函數(shù)與虛函數(shù)的區(qū)別在基類中聲明的虛函數(shù),如果在基類中沒有實現(xiàn)(即函數(shù)體為`=0`),則稱為純虛函數(shù)。純虛函數(shù)定義包含純虛函數(shù)的類稱為抽象類。抽象類不能被實例化,只能作為其他類的基類。派生類必須實現(xiàn)抽象類中的所有純虛函數(shù),才能被實例化。抽象類概念定義基類`Shape`和派生類`Circle`、`Rectangle`,并在基類中定義虛函數(shù)`draw()`。在派生類中重寫`draw()`函數(shù),以實現(xiàn)不同形狀的繪制邏輯。創(chuàng)建一個`Shape`類型的指針數(shù)組,并分別指向`Circle`和`Rectangle`對象。示例:利用虛函數(shù)實現(xiàn)多態(tài)示例:利用虛函數(shù)實現(xiàn)多態(tài)通過循環(huán)遍歷數(shù)組,并調(diào)用每個對象的draw()函數(shù),觀察多態(tài)行為。```cppusingnamespacestd;示例:利用虛函數(shù)實現(xiàn)多態(tài)classShape{示例:利用虛函數(shù)實現(xiàn)多態(tài)010203publicvirtualvoiddraw(){cout<<"Drawingashape..."<<endl;示例:利用虛函數(shù)實現(xiàn)多態(tài)03classCircle:publicShape{01}02};示例:利用虛函數(shù)實現(xiàn)多態(tài)publiccout<<"Drawingacircle..."<<endl;voiddraw()override{示例:利用虛函數(shù)實現(xiàn)多態(tài)示例:利用虛函數(shù)實現(xiàn)多態(tài)010203};classRectangle:publicShape{}示例:利用虛函數(shù)實現(xiàn)多態(tài)01public02voiddraw()override{cout<<"Drawingarectangle..."<<endl;03010203}};intmain(){示例:利用虛函數(shù)實現(xiàn)多態(tài)示例:利用虛函數(shù)實現(xiàn)多態(tài)Shape*shapes[2];shapes[0]=newCircle();shapes[1]=newRectangle();for(inti=0;i<2;i){shapes[i]->draw();//多態(tài)行為:根據(jù)實際對象類型調(diào)用相應(yīng)的函數(shù)示例:利用虛函數(shù)實現(xiàn)多態(tài)示例:利用虛函數(shù)實現(xiàn)多態(tài)01}02deleteshapes[0];03deleteshapes[1];示例:利用虛函數(shù)實現(xiàn)多態(tài)return0;}```示例:利用虛函數(shù)實現(xiàn)多態(tài)04類繼承關(guān)系中的多態(tài)現(xiàn)象子類覆蓋父類方法實現(xiàn)多態(tài)子類覆蓋父類方法時,訪問修飾符不能比父類中被覆蓋的方法的訪問級別更低。訪問修飾符子類可以覆蓋(重寫)父類中的方法,使得在調(diào)用該方法時,實際執(zhí)行的是子類中的實現(xiàn)。方法覆蓋(Override)在運行時,根據(jù)對象的實際類型來調(diào)用相應(yīng)的方法,實現(xiàn)多態(tài)。動態(tài)綁定(DynamicBinding)向下轉(zhuǎn)型(Downcasting)將父類類型的引用強制轉(zhuǎn)換為子類類型,需要顯式進行類型轉(zhuǎn)換,且可能引發(fā)`ClassCastException`異常。類型檢查在進行向下轉(zhuǎn)型前,最好使用`instanceof`運算符進行類型檢查,以確保轉(zhuǎn)換的安全性。向上轉(zhuǎn)型(Upcasting)將子類的對象賦值給父類類型的引用,可以自動進行類型轉(zhuǎn)換。向上轉(zhuǎn)型和向下轉(zhuǎn)型操作示例:繼承關(guān)系中多態(tài)應(yīng)用動物類(Animal)作為父類,具有叫(shout)的行為。02貓類(Cat)和狗類(Dog)作為子類,分別覆蓋父類的叫(shout)方法,實現(xiàn)各自特有的叫聲。03在主程序中,通過創(chuàng)建動物類引用指向貓類和狗類對象,并調(diào)用叫(shout)方法,觀察多態(tài)現(xiàn)象。01classAnimal{publicvoidshout(){```java示例:繼承關(guān)系中多態(tài)應(yīng)用示例:繼承關(guān)系中多態(tài)應(yīng)用}}classCatextendsAnimal{010203示例:繼承關(guān)系中多態(tài)應(yīng)用示例:繼承關(guān)系中多態(tài)應(yīng)用030201@Overridepublicvoidshout(){System.out.println("Catmeows");}}classDogextendsAnimal{010203示例:繼承關(guān)系中多態(tài)應(yīng)用示例:繼承關(guān)系中多態(tài)應(yīng)用010203@Overridepublicvoidshout(){System.out.println("Dogbarks");示例:繼承關(guān)系中多態(tài)應(yīng)用}}publicclassMain{publicstaticvoidmain(String[]args){Animalanimal1=newCat();//向上轉(zhuǎn)型Animalanimal2=newDog();//向上轉(zhuǎn)型示例:繼承關(guān)系中多態(tài)應(yīng)用animal1.shout();//輸出"Catmeows"animal2.shout();//輸出"Dogbarks"http://向下轉(zhuǎn)型示例(需要類型檢查)示例:繼承關(guān)系中多態(tài)應(yīng)用if(animal1instanceofCat){Catcat=(Cat)animal1;cat.shout();//輸出"Catmeows"示例:繼承關(guān)系中多態(tài)應(yīng)用02030401示例:繼承關(guān)系中多態(tài)應(yīng)用}}}```05模板編程與泛型編程中的多態(tài)模板編程簡介及優(yōu)勢模板編程是一種編程范式,它允許程序員編寫與數(shù)據(jù)類型無關(guān)的代碼。通過使用模板,可以為多種數(shù)據(jù)類型編寫通用的算法或數(shù)據(jù)結(jié)構(gòu),提高代碼的重用性和可維護性。模板編程的優(yōu)勢在于其靈活性和高效性。它可以根據(jù)實際數(shù)據(jù)類型進行編譯時優(yōu)化,生成針對特定數(shù)據(jù)類型的代碼,從而提高運行效率。VS泛型編程是一種編程范式,旨在編寫與具體數(shù)據(jù)類型無關(guān)的代碼。C中的模板是泛型編程的重要工具,它允許程序員編寫適用于多種數(shù)據(jù)類型的通用代碼。C中的泛型編程思想體現(xiàn)在STL(標準模板庫)中,STL提供了一系列通用的算法和數(shù)據(jù)結(jié)構(gòu),如vector、list、map等,這些算法和數(shù)據(jù)結(jié)構(gòu)都是基于模板實現(xiàn)的,可以適用于各種數(shù)據(jù)類型。泛型編程思想在C中體現(xiàn)通過使用模板,可以實現(xiàn)類似于多態(tài)的效果。例如,可以定義一個模板函數(shù),該函數(shù)接受不同類型的參數(shù),并根據(jù)參數(shù)類型執(zhí)行不同的操作。下面是一個簡單的示例,展示了如何使用模板實現(xiàn)多態(tài)效果示例:模板實現(xiàn)多態(tài)效果要點三```cpp要點一要點二usingnamespacestd;template<typenameT>要點三示例:模板實現(xiàn)多態(tài)效果示例:模板實現(xiàn)多態(tài)效果classAnimal{示例:模板實現(xiàn)多態(tài)效果virtualvoidspeak(){publiccout<<"Animalspeaks"<<endl;}};template<typenameT>示例:模板實現(xiàn)多態(tài)效果classDog:publicAnimal{示例:模板實現(xiàn)多態(tài)效果publicvoidspeak()override{cout<<"Dogbarks"<<endl;010203示例:模板實現(xiàn)多態(tài)效果template<typenameT>}};示例:模板實現(xiàn)多態(tài)效果示例:模板實現(xiàn)多態(tài)效果classCat:publicAnimal{publicvoidspeak()override{cout<<"Catmeows"<<endl;示例:模板實現(xiàn)多態(tài)效果}};template<typenameT>示例:模板實現(xiàn)多態(tài)效果示例:模板實現(xiàn)多態(tài)效果voidanimalSpeak(Animal*animal){animal->speak();示例:模板實現(xiàn)多態(tài)效果010203}intmain(){Dog<int>dog;示例:模板實現(xiàn)多態(tài)效果Cat<float>cat;animalSpeak(&cat);//輸出"Catmeows"animalSpeak(&dog);//輸出"Dogbarks"示例:模板實現(xiàn)多態(tài)效果示例:模板實現(xiàn)多態(tài)效果return0;123}```在上面的示例中,我們定義了一個Animal類模板和兩個繼承自Animal的子類模板Dog和Cat。每個子類都重寫了speak()方法以實現(xiàn)不同的行為。我們還定義了一個animalSpeak()函數(shù)模板,該函數(shù)接受一個Animal指針作為參數(shù),并調(diào)用其speak()方法。在主函數(shù)中,我們創(chuàng)建了一個Dog對象和一個Cat對象,并分別調(diào)用animalSpeak()函數(shù)來觀察多態(tài)效果。示例:模板實現(xiàn)多態(tài)效果06總結(jié)回顧與拓展延伸010203多態(tài)的概念多態(tài)是面向?qū)ο缶幊讨械囊粋€重要特征,它允許使用父類類型的指針或引用來引用子類的對象,從而實現(xiàn)代碼的靈活性和可擴展性。虛函數(shù)與純虛函數(shù)在C中,通過使用虛函數(shù)和純虛函數(shù)來實現(xiàn)多態(tài)。虛函數(shù)是在基類中聲明并使用關(guān)鍵字`virtual`修飾的成員函數(shù),它在派生類中可以被重寫。純虛函數(shù)是一種特殊的虛函數(shù),它在基類中聲明但沒有定義,要求派生類必須提供實現(xiàn)。動態(tài)綁定與運行時類型識別多態(tài)的實現(xiàn)依賴于動態(tài)綁定和
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 睪丸炎的護理查房
- 2025汽車銷售管理系統(tǒng)購銷合同
- 急性胰腺炎護理措施
- 2025年周口駕校考試貨運從業(yè)資格證考試題庫
- 2025年和田貨運從業(yè)資格證
- 紅細胞偏低的健康宣教
- 2025年漢中貨運資格證500道題庫
- 2025年桂林貨運資格證500道題庫
- 2025年畢節(jié)從業(yè)資格證考試答案貨運
- 2025年佳木斯貨運上崗證考試多少道題
- 護士的禮儀培訓(xùn)
- 炎德·英才大聯(lián)考湖南師大附中2025屆高三月考試卷(七)物理試卷(含答案)
- 2025年部編版道德與法治小學三年級下冊全冊教案(含教學計劃)
- 【MOOC】工程材料學-華中科技大學 中國大學慕課MOOC答案
- 2025年4月自考02134 信息系統(tǒng)設(shè)計與分析押題卷及答案
- 2022年電子元器件貼片及插件焊接檢驗規(guī)范
- 可下載打印的公司章程
- 三年級下冊綜合實踐活動課件-水果拼盤 全國通用(共15張PPT)
- 污水池內(nèi)防腐施工方案
- 海南省省直轄縣級各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名明細居民村民委員會
- summary-writing-概要寫作-優(yōu)質(zhì)課件
評論
0/150
提交評論