版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、C+程序設(shè)計新世紀(jì)應(yīng)用型高等教育教材編審委員會 組編主編 羅燁 李秉璋第二版新世紀(jì)應(yīng)用型高等教育軟件專業(yè)系列規(guī)劃教材第7章 多態(tài)性7.1 多態(tài)性概述3多態(tài)是指同樣的消息被不同類型的對象接收時導(dǎo)致不同的行為。所謂消息是指對類的成員函數(shù)的調(diào)用,不同的行為是指不同的實現(xiàn),即調(diào)用了不同的函數(shù)。按照多態(tài)實現(xiàn)的時間,可以分為兩類:編譯時多態(tài)和運行時多態(tài)。面向?qū)ο蟮亩鄳B(tài)性按照類型可以分為四類:重載多態(tài)強制多態(tài)包含多態(tài)參數(shù)多態(tài)7.2 運算符重載4運算符重載是指對C+現(xiàn)有的運算符賦予多重含義,使同一個運算符可以操作不同類型對象,從而產(chǎn)生不同的行為。運算符重載是通過函數(shù)重載實現(xiàn)的。程序在編譯時,編譯程序就根據(jù)實參
2、和形參的類型,確定具體調(diào)用的函數(shù),將函數(shù)調(diào)用和被調(diào)用函數(shù)實現(xiàn)綁定。因此運算符重載屬于靜態(tài)多態(tài)。運算符重載后,必須保持運算符原來的語義不變,即:7.2.1 運算符重載規(guī)則(1)運算符優(yōu)先級不變;(2)運算符結(jié)合性不變;(3)運算符的操作數(shù)個數(shù)不變。7.2 運算符重載51.一般運算符的重載運算符重載為類的成員函數(shù)時,函數(shù)參數(shù)個數(shù)比該運算符需要的操作數(shù)個數(shù)少一個。因此,雙目運算符重載函數(shù)只需要一個參數(shù),單目運算符重載函數(shù)不需要參數(shù)。雙目運算符重載為類的成員函數(shù)的聲明格式為:單目運算符重載為類的成員函數(shù)的聲明格式為:7.2.2 運算符重載為類的成員函數(shù)7.2 運算符重載6雙目運算符重載成類的友元函數(shù)的
3、語法格式為:一般將雙目運算符的左操作數(shù)作為重載函數(shù)的參數(shù)1,右操作數(shù)作為重載函數(shù)的參數(shù)2。單目運算符重載成類的友元函數(shù)的語法格式為:7.2.3 運算符重載為友元函數(shù)7.2 運算符重載7可以使用類的構(gòu)造函數(shù)和類型轉(zhuǎn)換函數(shù)實現(xiàn)這類轉(zhuǎn)換。與基本類型的數(shù)據(jù)轉(zhuǎn)換相同,這類轉(zhuǎn)換也分為隱式和顯式兩種轉(zhuǎn)換方式。1.基本類型到類類型的轉(zhuǎn)換有一個無默認(rèn)值參數(shù)的類的構(gòu)造函數(shù)可以實現(xiàn)從基本類型到類類型的轉(zhuǎn)換。其語法形式為:*7.2.4 類型轉(zhuǎn)換7.2 運算符重載82.類類型到基本類型的轉(zhuǎn)換在類中我們可以定義一種特殊的類型轉(zhuǎn)換函數(shù),將對象轉(zhuǎn)換成基本類型的數(shù)據(jù)。類類型轉(zhuǎn)換函數(shù)的形式為:*7.2.4 類型轉(zhuǎn)換7.3 多態(tài)性
4、與虛函數(shù)9虛函數(shù)聲明語法格式如下:7.3.1 虛函數(shù)使用虛函數(shù)還必須注意以下幾點:(1)當(dāng)在派生類中未重新定義虛函數(shù),或者定義了虛函數(shù)的重載形式,但并沒有重新定義虛函數(shù)時,這時無法通過基類指針調(diào)用派生類的虛函數(shù),調(diào)用的仍然是基類的虛函數(shù),屬于靜態(tài)聯(lián)編。(2)當(dāng)基類構(gòu)造函數(shù)調(diào)用虛函數(shù)時,不會調(diào)用派生類的虛函數(shù)。(3)如果基類虛函數(shù)的形參有默認(rèn)值,派生類重寫虛函數(shù)時,不需要說明不同的默認(rèn)值。原因是雖然虛函數(shù)是動態(tài)綁定的,但默認(rèn)形參值是靜態(tài)綁定的。10析構(gòu)函數(shù)可以是虛函數(shù),而且通常聲明為虛函數(shù),即虛析構(gòu)函數(shù)。虛析構(gòu)函數(shù)定義形式如下:如果基類的析構(gòu)函數(shù)被聲明為虛函數(shù),則該基類的所有派生類的析構(gòu)函數(shù),無
5、論是否使用virtual關(guān)鍵字進行聲明,都自動成為虛函數(shù)。7.3.2 虛析構(gòu)函數(shù)7.3 多態(tài)性與虛函數(shù)11純虛函數(shù)是在基類中僅給出聲明,沒有實現(xiàn)的虛函數(shù)。純虛函數(shù)的作用就是在基類中通過純虛函數(shù)的聲明,統(tǒng)一類族的接口形式。純虛函數(shù)的聲明格式為:對于純虛函數(shù),需要說明以下兩點:(1)純虛函數(shù)沒有實現(xiàn)部分,連空函數(shù)體也不能寫,即純虛函數(shù)沒有函數(shù)體。因此純虛函數(shù)不能被調(diào)用,而函數(shù)體為空時表示函數(shù)體由空語句構(gòu)成,該函數(shù)可以被調(diào)用,只是什么也不做就返回。(2)“=0”表示程序員將不定義該函數(shù),函數(shù)聲明是讓編譯程序在派生類中為該函數(shù)保留一個位置?!?0”本質(zhì)上是將指向函數(shù)體的指針定義為NULL。7.4.1
6、純虛函數(shù)7.4 純虛函數(shù)與抽象類12含有純虛函數(shù)的類是抽象類。抽象類的作用是通過純虛函數(shù)為它的類族提供一個基本的框架和統(tǒng)一的對外接口。而接口的完整實現(xiàn),即純虛函數(shù)的實現(xiàn),則由抽象類的派生類根據(jù)各自需要自行確定。從而使整個類族形成統(tǒng)一的操作界面,能夠更有效地發(fā)揮多態(tài)特性。抽象類包含了純虛函數(shù),因此不能實例化,即不能定義一個抽象類的對象,但是可以定義抽象類的指針或引用。7.4.2 抽象類7.4 純虛函數(shù)與抽象類137.4.3 虛函數(shù)動態(tài)綁定實現(xiàn)方法7.4 純虛函數(shù)與抽象類14只考慮簡單的情況,設(shè)被積函數(shù)是一個一元函數(shù),定積分表達(dá)式為:7.5.1 算法分析7.5 抽象類實例變步長梯形積分算法求函數(shù)的
7、定積分15經(jīng)上一節(jié)算法分析,程序需要計算:(1)被積函數(shù)f(x)在每個小積分區(qū)間的函數(shù)值;(2)利用前節(jié)推導(dǎo)出的公式(7-2)、(7-5),給出在整個積分區(qū)域、變步長梯形積分的實現(xiàn)。程序的設(shè)計思路是,定義兩個抽象類,分別是被積函數(shù)基類F、積分方法基類Integ。這兩個類都有純虛函數(shù)形式的函數(shù)調(diào)用運算符“()”重載函數(shù)。分別是:7.5.2 程序設(shè)計思路7.5 抽象類實例變步長梯形積分算法求函數(shù)的定積分167.5.2 程序設(shè)計思路7.5 抽象類實例變步長梯形積分算法求函數(shù)的定積分17第6章例6-15以一個公司人員管理程序為例,介紹了類的派生過程及虛基類的應(yīng)用。但是程序存在兩個不足:1.基類的成員函數(shù)setpay函數(shù)體為空,但仍要寫出函數(shù)體,顯得冗余。2.在main函數(shù)中,建立了四個不同類的對象,對它們進行了類似的操作,程序重復(fù)寫了四遍類似的語句,不夠簡潔,程序通用性不強。本例將應(yīng)用抽象類對該程序進行改進,解決上述不足?;恊mployee中將setpay定義為純虛函數(shù),因此employee就是抽象類,不能實例化,但可以定義employee類指針。依據(jù)類型兼容規(guī)則,在主函數(shù)中用employee指針指向派生類的對象,調(diào)用派生類中的虛函數(shù)set
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年三季度報天津地區(qū)A股負(fù)債合計排名前十大上市公司
- 2025版城市基礎(chǔ)設(shè)施建設(shè)委托合同范例大全3篇
- 2025年樹林資源綜合利用與循環(huán)經(jīng)濟承包合同范本3篇
- 2025年食堂食品安全風(fēng)險評估承包合同3篇
- 2025年山東貨運從業(yè)資格證500道題目及答案
- 2025版停薪留職合同模板:民營企業(yè)員工休整計劃書3篇
- 二零二五年度城市綠化工程項目采購安裝合同3篇
- 二零二五年度地質(zhì)勘探臨時駕駛員用工合同4篇
- 2025年度物流園區(qū)個人運輸承包服務(wù)協(xié)議2篇
- 2025年度模板木方項目合作協(xié)議范本大全3篇
- 土地買賣合同參考模板
- 新能源行業(yè)市場分析報告
- 2025年天津市政建設(shè)集團招聘筆試參考題庫含答案解析
- 房地產(chǎn)運營管理:提升項目品質(zhì)
- 自愿斷絕父子關(guān)系協(xié)議書電子版
- 你劃我猜游戲【共159張課件】
- 專升本英語閱讀理解50篇
- 中餐烹飪技法大全
- 新型電力系統(tǒng)研究
- 滋補類用藥的培訓(xùn)
- 北師大版高三數(shù)學(xué)選修4-6初等數(shù)論初步全冊課件【完整版】
評論
0/150
提交評論