版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
學(xué)習(xí)目標(biāo)了解靜態(tài)聯(lián)編和動態(tài)聯(lián)編的概念
掌握虛函數(shù)的定義和調(diào)用方法理解純虛函數(shù)和抽象類的概念8.1聯(lián)編的概念多態(tài)性是通過聯(lián)編來實(shí)現(xiàn)的。所謂聯(lián)編,是把函數(shù)調(diào)用與適當(dāng)?shù)暮瘮?shù)代碼相關(guān)聯(lián)的動作,分為靜態(tài)聯(lián)編和動態(tài)聯(lián)編。靜態(tài)聯(lián)編在程序執(zhí)行前完成,在編譯階段決定執(zhí)行哪個(gè)同名函數(shù)被調(diào)用,這稱為靜態(tài)聯(lián)編;而在編譯階段不能決定執(zhí)行哪個(gè)同名函數(shù)被調(diào)用,只有在執(zhí)行階段才能依據(jù)要處理的對象類型來決定執(zhí)行哪個(gè)類的成員函數(shù),其所支持的多態(tài)性稱運(yùn)行時(shí)的多態(tài)性,稱為動態(tài)聯(lián)編。是通過繼承和虛函數(shù)實(shí)現(xiàn)的8.2動態(tài)聯(lián)編和虛函數(shù)8.2.1虛函數(shù)的定義虛函數(shù)的定義格式如下:virtual<返回類型><函數(shù)名>(<參數(shù)列表>){<函數(shù)體>}說明(1)virtual關(guān)鍵字聲明的函數(shù)稱為虛函數(shù)。(2)如果某類的一個(gè)成員函數(shù)聲明為虛函數(shù),則意味著該成員函數(shù)在派生類中可能有不同的實(shí)現(xiàn)。在基類的派生類中就可以定義一個(gè)其函數(shù)名、參數(shù)、返回類型均相同的虛函數(shù)。(3)當(dāng)通過指針或引用來調(diào)用該虛函數(shù)時(shí),將會采用動態(tài)聯(lián)編的方式。8.2動態(tài)聯(lián)編和虛函數(shù)8.2.2虛函數(shù)的調(diào)用通過對象指針或引用來調(diào)用虛函數(shù)時(shí),調(diào)用到的虛函數(shù)由對象指針或?qū)ο笠盟P(guān)聯(lián)的實(shí)際對象所決定。因此,對象指針或引用關(guān)聯(lián)到不同類的對象時(shí),調(diào)用到的虛函數(shù)就不同,實(shí)現(xiàn)了動態(tài)多態(tài)性。所以,利用虛函數(shù)來實(shí)現(xiàn)動態(tài)多態(tài)性,必須滿足如下要求:(1)在基類中把成員函數(shù)定義為虛函數(shù);(2)在派生類中定義與基類虛函數(shù)同名、同參數(shù)、同返回類型的成員函數(shù),但函數(shù)體不同,以實(shí)現(xiàn)對不同對象的操作;(3)在main()函數(shù)中,通過對象指針或引用來調(diào)用虛函數(shù)。8.3純虛函數(shù)和抽象類8.3.1純虛函數(shù)純虛函數(shù)是一種特殊的虛函數(shù),它只有函數(shù)的聲明,沒有具體實(shí)現(xiàn)函數(shù)的功能,要求各派生類根據(jù)實(shí)際需要定義自己的版本,純虛函數(shù)的聲明格式如下:
virtual<返回類型><函數(shù)名>(<參數(shù)表>)=0;說明由于純虛函數(shù)沒有函數(shù)體,所以在派生類中沒有重新定義純虛函數(shù)之前,是不可以被調(diào)用該函數(shù)的,也不可以被繼承。8.4靜態(tài)多態(tài)性與動態(tài)多態(tài)性的比較在C++中,靜態(tài)多態(tài)性具體表現(xiàn)為重載(overload);動態(tài)多態(tài)性具體表現(xiàn)為純虛函數(shù)和覆蓋(override)。另外,前面還提到了隱藏。8.5運(yùn)算符重載運(yùn)算符重載其實(shí)就是函數(shù)的重載,是一種重要的重載多態(tài)性。給已有運(yùn)算符賦予更多的含義,使它能夠用于特定類的對象,執(zhí)行特定的功能,而且使用形式與基本類型數(shù)據(jù)的形式相同。C++語言支持運(yùn)算符重載,但許多高級語言(如Java語言)并不支持運(yùn)算符重載。8.5.1運(yùn)算符重載的一般規(guī)則運(yùn)算符是C++系統(tǒng)內(nèi)部定義的,它們具有特定的語法規(guī)則,如參數(shù)說明、運(yùn)算順序、優(yōu)先級別等。因此,運(yùn)算符重載時(shí)必須尊遵守一定的規(guī)則,不是所有的運(yùn)算符都允許重載,C++語言允許重載的運(yùn)算符如表8-1所示。8.5運(yùn)算符重載如表8-1所示。8.5運(yùn)算符重載運(yùn)算符重載時(shí)必須遵守如下原則:1.重載的運(yùn)算符是C++已經(jīng)存在的運(yùn)算符,不能主觀臆造。2.運(yùn)算符重載不能改變運(yùn)算符的語法結(jié)構(gòu),即單目運(yùn)算符只能重載為單目運(yùn)算符,雙目運(yùn)算符重載只能重載為雙目運(yùn)算符。3.運(yùn)算符重載不能改變C++語言中已定義的運(yùn)算符優(yōu)先順序和結(jié)合性。4.運(yùn)算符重載一般不改變運(yùn)算符的功能。例如,重載的“+”運(yùn)算符不可以用來計(jì)算兩個(gè)對象的乘積。5.不能重載的運(yùn)算符有:(1)sizeof()運(yùn)算符;(2)成員運(yùn)算符(.);(3)指向成員的指針運(yùn)算符(*);(4)作用域運(yùn)算符(::);(5)條件運(yùn)算符(?:);6.編譯程序?qū)\(yùn)算符重載遵循函數(shù)重載的選擇規(guī)則。8.5運(yùn)算符重載8.5.2運(yùn)算符重載為成員函數(shù)運(yùn)算符重載為類的成員函數(shù)的一般形式為:<類型><類名::>operator<運(yùn)算符>([<形參表>]){
函數(shù)體;}說明(1)“類型”是作為函數(shù)的返回類型;(2)“類名”是重載該運(yùn)算符的類;(3)“operator”是關(guān)鍵字,是重載運(yùn)算符的標(biāo)志;(4)“運(yùn)算符”是要重載的運(yùn)算符;(5)“形參表”表示該運(yùn)算符所需要的操作數(shù),雙目運(yùn)算符重載為類的成員函數(shù),它們包含一個(gè)形參,即運(yùn)算符右則的操作數(shù)。8.5運(yùn)算符重載1.雙目運(yùn)算符重載為類成員函數(shù)雙目運(yùn)算符有兩個(gè)操作數(shù),通常在運(yùn)算符的左右兩側(cè),如a+b,a<b等。在重載雙目運(yùn)算符函數(shù)中,一個(gè)操作數(shù)是對象本身的數(shù)據(jù),由this指針給出,另一個(gè)操作數(shù)則需要通過運(yùn)算符重載函數(shù)的參數(shù)表來傳遞。2.單目運(yùn)算符重載為類成員函數(shù)單目運(yùn)算符中有一個(gè)操作數(shù),如!a,-b,&c,++i等,重載單目運(yùn)算符的方法與重載雙目運(yùn)算符的方法類似。但由于單目運(yùn)算符只有一個(gè)操作數(shù),因此運(yùn)算符重載函數(shù)只有一個(gè)參數(shù),且可以省略此參數(shù)。因?yàn)椴僮鲾?shù)由對象的this指針給出,就不需要任何參數(shù)。8.5運(yùn)算符重載8.5.3運(yùn)算符重載為友元函數(shù)運(yùn)算符重載為類的友元函數(shù)的一般形式如下:friend<類型>operator<運(yùn)算符>(<形參表>){
函數(shù)體;}說明(1)“類型”是作為函數(shù)的返回類型;(2)“operator”是關(guān)鍵字,是重載運(yùn)算符的標(biāo)志;(3)“運(yùn)算符”是要重載的運(yùn)算符;(4)“形參表”表示該運(yùn)算符所需要的參數(shù)和類型;(5)“friend”是運(yùn)算符重載為友元函數(shù)時(shí),在函數(shù)類型說明之前使用的關(guān)鍵字。8.5運(yùn)算符重載1.雙目運(yùn)算符重載為類的友元函數(shù)重載為類的友元函數(shù)時(shí),將沒有隱含的參數(shù)this指針。這樣,對于雙目運(yùn)算符,友元函數(shù)有兩個(gè)參數(shù)。友元函數(shù)無需利用對象或其指針進(jìn)行調(diào)用,但它可以自由地訪問對象的私有成員。2.單目運(yùn)算符重載為類的友元函數(shù)單目運(yùn)算符重載為類的成員函數(shù)時(shí),一般不需要顯示說明參數(shù)。因?yàn)橹剌d為類的成員函數(shù)時(shí),總是隱含一個(gè)參數(shù),該參數(shù)是this指針。當(dāng)重載為類的友元函數(shù)時(shí),由于不存在隱含的this指針,所以對單目運(yùn)算符來說,友元函數(shù)必須有一個(gè)參數(shù)。8.6情景應(yīng)用——訓(xùn)練項(xiàng)目8.6.1項(xiàng)目1:抽象類的應(yīng)用實(shí)例
【問題描述】利用抽象類提供統(tǒng)一接口技術(shù),編寫一個(gè)程序計(jì)算正方形、球體和圓柱體的表面積和體積?!舅惴ㄔO(shè)計(jì)】(1)從正方形、球體和圓柱體的各種運(yùn)算中抽象出一個(gè)公共基類container為抽象基類。(2)在抽象基類中,定義求表面積和體積的2個(gè)純虛函數(shù)。抽象類中定義一個(gè)公共的數(shù)據(jù)成員radius,可作為球的半經(jīng)、正方體邊長、圓柱體的底面半經(jīng)。
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 進(jìn)修完畢出科心得體會2000字(13篇)
- 板式換熱器安裝施工方案
- 2025年時(shí)尚雜志排版印刷設(shè)計(jì)制作委托合同3篇
- 課程設(shè)計(jì)面包板
- 二零二五年度美縫施工項(xiàng)目合同糾紛解決協(xié)議4篇
- 2024年新疆安全員C證考試題庫附答案
- 二零二五版體育賽事贊助與冠名權(quán)合同4篇
- 二零二五年度生態(tài)公園施工合同補(bǔ)充協(xié)議2篇
- 銷售管理什么課程設(shè)計(jì)
- 2024版離婚民政局離婚協(xié)議書
- 拆遷評估機(jī)構(gòu)選定方案
- 床旁超聲監(jiān)測胃殘余量
- 上海市松江區(qū)市級名校2025屆數(shù)學(xué)高一上期末達(dá)標(biāo)檢測試題含解析
- 綜合實(shí)踐活動教案三上
- 《新能源汽車電氣設(shè)備構(gòu)造與維修》項(xiàng)目三 新能源汽車照明與信號系統(tǒng)檢修
- 2024年新課標(biāo)《義務(wù)教育數(shù)學(xué)課程標(biāo)準(zhǔn)》測試題(附含答案)
- 醫(yī)院培訓(xùn)課件:《靜脈中等長度導(dǎo)管臨床應(yīng)用專家共識》
- 趣味知識問答100道
- 中國國際大學(xué)生創(chuàng)新大賽與“挑戰(zhàn)杯”大學(xué)生創(chuàng)業(yè)計(jì)劃競賽(第十一章)大學(xué)生創(chuàng)新創(chuàng)業(yè)教程
- 鋼管豎向承載力表
- 2024年新北師大版八年級上冊物理全冊教學(xué)課件(新版教材)
評論
0/150
提交評論