




已閱讀5頁,還剩52頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1 第五章類與對(duì)象 C 語言程序設(shè)計(jì) 2 本章主要內(nèi)容 面向?qū)ο蟮乃枷隣OP的基本特點(diǎn)類概念和聲明對(duì)象構(gòu)造函數(shù) 析構(gòu)函數(shù)內(nèi)聯(lián)成員函數(shù)拷貝構(gòu)造函數(shù)類的組合 3 回顧 面向過程的設(shè)計(jì)方法 重點(diǎn) 如何實(shí)現(xiàn)細(xì)節(jié)過程 將數(shù)據(jù)與函數(shù)分開 形式 主模塊 若干個(gè)子模塊 main 子函數(shù) 特點(diǎn) 自頂向下 逐步求精 功能分解 缺點(diǎn) 效率低 程序的可重用性差 面向?qū)ο蟮乃枷?4 面向?qū)ο蟮姆椒?目的 實(shí)現(xiàn)軟件設(shè)計(jì)的產(chǎn)業(yè)化 觀點(diǎn) 自然界是由實(shí)體 對(duì)象 所組成 程序設(shè)計(jì)方法 使用面向?qū)ο蟮挠^點(diǎn)來描述模仿并處理現(xiàn)實(shí)問題 要求 高度概括 分類 和抽象 面向?qū)ο蟮乃枷?5 抽象 抽象是對(duì)具體對(duì)象 問題 進(jìn)行概括 抽出這一類對(duì)象的公共性質(zhì)并加以描述的過程 先注意問題的本質(zhì)及描述 其次是實(shí)現(xiàn)過程或細(xì)節(jié) 數(shù)據(jù)抽象 描述某類對(duì)象的屬性或狀態(tài) 對(duì)象相互區(qū)別的物理量 代碼抽象 描述某類對(duì)象的共有的行為特征或具有的功能 抽象的實(shí)現(xiàn) 通過類的聲明 OOP的基本特點(diǎn) 6 抽象實(shí)例 鐘表 數(shù)據(jù)抽象 intHour intMinute intSecond代碼抽象 SetTime ShowTime OOP的基本特點(diǎn) 7 抽象實(shí)例 鐘表類 classClock public voidSetTime intNewH intNewM intNewS voidShowTime private intHour Minute Second OOP的基本特點(diǎn) 8 抽象實(shí)例 人 數(shù)據(jù)抽象 char name char gender intage intid代碼抽象 生物屬性角度 GetCloth Eat Step 社會(huì)屬性角度 Work Promote OOP的基本特點(diǎn) 9 封裝 將抽象出的數(shù)據(jù)成員 代碼成員相結(jié)合 將它們視為一個(gè)整體 目的是曾強(qiáng)安全性和簡(jiǎn)化編程 使用者不必了解具體的實(shí)現(xiàn)細(xì)節(jié) 而只需要通過外部接口 以特定的訪問權(quán)限 來使用類的成員 實(shí)現(xiàn)封裝 類聲明中的 OOP的基本特點(diǎn) 10 封裝 實(shí)例 classClock public voidSetTime intNewH intNewM intNewS voidShowTime private intHour Minute Second 特定的訪問權(quán)限 OOP的基本特點(diǎn) 11 繼承與派生 是C 中支持層次分類的一種機(jī)制 允許程序員在保持原有類特性的基礎(chǔ)上 進(jìn)行更具體的說明 實(shí)現(xiàn) 聲明派生類 第七章 OOP的基本特點(diǎn) 12 多態(tài)性 多態(tài) 同一名稱 不同的功能實(shí)現(xiàn)方式 目的 達(dá)到行為標(biāo)識(shí)統(tǒng)一 減少程序中標(biāo)識(shí)符的個(gè)數(shù) 實(shí)現(xiàn) 重載函數(shù)和虛函數(shù) 第八章 OOP的基本特點(diǎn) 13 c 中的類 類是具有相同屬性和行為的一組對(duì)象的集合 它為屬于該類的全部對(duì)象提供了統(tǒng)一的抽象描述 其內(nèi)部包括屬性和行為兩個(gè)主要部分 利用類可以實(shí)現(xiàn)數(shù)據(jù)的封裝 隱藏 繼承與派生 利用類易于編寫大型復(fù)雜程序 其模塊化程度比C中采用函數(shù)更高 類和對(duì)象 14 類的聲明形式 類是一種用戶自定義類型 聲明形式 class類名稱 public 公有成員 外部接口 private 私有成員protected 保護(hù)型成員 類和對(duì)象 15 公有類型成員 在關(guān)鍵字public后面聲明 它們是類與外部的接口 任何外部函數(shù)都可以訪問公有類型數(shù)據(jù)和函數(shù) 類和對(duì)象 16 私有類型成員 在關(guān)鍵字private后面聲明 只允許本類中的函數(shù)訪問 而類外部的任何函數(shù)都不能訪問 如果緊跟在類名稱的后面聲明私有成員 則關(guān)鍵字private可以省略 類和對(duì)象 17 保護(hù)類型 與private類似 其差別表現(xiàn)在繼承與派生時(shí)對(duì)派生類的影響不同 第七章講 類和對(duì)象 18 類的成員 classClock public voidSetTime intNewH intNewM intNewS voidShowTime private intHour Minute Second 類和對(duì)象 成員數(shù)據(jù) 成員函數(shù) voidClock SetTime intNewH intNewM intNewS Hour NewH Minute NewM Second NewS voidClock ShowTime cout Hour Minute Second 19 20 成員數(shù)據(jù) 與一般的變量聲明相同 但需要將它放在類的聲明體中 類和對(duì)象 21 成員函數(shù) 在類中說明原形 可以在類外給出函數(shù)體實(shí)現(xiàn) 并在函數(shù)名前使用類名加以限定 也可以直接在類中給出函數(shù)體 形成內(nèi)聯(lián)成員函數(shù) 允許聲明重載函數(shù)和帶默認(rèn)形參值的函數(shù) 類和對(duì)象 22 內(nèi)聯(lián)成員函數(shù) 為了提高運(yùn)行時(shí)的效率 對(duì)于較簡(jiǎn)單的函數(shù)可以聲明為內(nèi)聯(lián)形式 內(nèi)聯(lián)函數(shù)體中不要有復(fù)雜結(jié)構(gòu) 如循環(huán)語句和switch語句 在類中聲明內(nèi)聯(lián)成員函數(shù)的方式 將函數(shù)體放在類的聲明中 使用inline關(guān)鍵字 類和對(duì)象 23 內(nèi)聯(lián)成員函數(shù)舉例 一 classPoint public voidInit intinitX intinitY X initX Y initY intGetX returnX intGetY returnY private intX Y 類和對(duì)象 24 內(nèi)聯(lián)成員函數(shù)舉例 二 classPoint public voidInit intinitX intinitY intGetX intGetY private intX Y 類和對(duì)象 inlinevoidPoint Init intinitX intinitY X initX Y initY inlineintPoint GetX returnX inlineintPoint GetY returnY 25 26 對(duì)象 類的對(duì)象是該類的某一特定實(shí)體 即類類型的變量 聲明形式 類名對(duì)象名 例 ClockmyClock 類和對(duì)象 27 類中成員的訪問方式 類中成員互訪直接使用成員名類外訪問使用 對(duì)象名 成員名 方式訪問public屬性的成員 類和對(duì)象 28 例5 1類的應(yīng)用舉例 includeusingnamespacestd classClock public voidSetTime intNewH intNewM intNewS voidShowTime private intHour Minute Second 類和對(duì)象 29 例5 1類的應(yīng)用舉例 voidClock SetTime intNewH intNewM intNewS Hour NewH Minute NewM Second NewS voidClock ShowTime cout Hour Minute Second voidmain void ClockmyClock myClock SetTime 8 30 30 myClock ShowTime 類和對(duì)象 30 構(gòu)造函數(shù) 在創(chuàng)建對(duì)象時(shí)可借助于以下方法進(jìn)行初始化 1 通過賦值語句 即將一個(gè)已經(jīng)初始化的對(duì)象賦給要初始化的對(duì)象 2 在類中定義一個(gè)成員函數(shù) 該成員函數(shù)能夠?qū)?duì)象中的成員數(shù)據(jù)進(jìn)行設(shè)置 3 通過類中的一種特殊的成員函數(shù) 構(gòu)造函數(shù)來進(jìn)行初始化 這是一種最常用的方法 它的特點(diǎn)是在創(chuàng)建對(duì)象的同時(shí)能自動(dòng)對(duì)對(duì)象中的成員數(shù)據(jù)進(jìn)行初始化 構(gòu)造函數(shù)和析構(gòu)函數(shù) 31 構(gòu)造函數(shù) 構(gòu)造函數(shù)的作用是在對(duì)象被創(chuàng)建時(shí)使用特定的值構(gòu)造對(duì)象 或者說將對(duì)象初始化為一個(gè)特定的狀態(tài) 在對(duì)象創(chuàng)建時(shí)由系統(tǒng)自動(dòng)調(diào)用 如果程序中未聲明 則系統(tǒng)自動(dòng)產(chǎn)生出一個(gè)默認(rèn)形式的構(gòu)造函數(shù)允許為內(nèi)聯(lián)函數(shù) 重載函數(shù) 帶默認(rèn)形參值的函數(shù) 構(gòu)造函數(shù)和析構(gòu)函數(shù) 32 構(gòu)造函數(shù) 與類同名的成員函數(shù)是構(gòu)造函數(shù) 它是一個(gè)特殊的成員函數(shù) 沒有返回值 定義構(gòu)造函數(shù)的一般格式為 注意 構(gòu)造函數(shù)沒有返回值 在聲明和定義構(gòu)造函數(shù)不能說明它的返回類型 即使void類型也不行 構(gòu)造函數(shù)和析構(gòu)函數(shù) 33 構(gòu)造函數(shù)舉例 classClock public Clock intNewH intNewM intNewS 構(gòu)造函數(shù)voidSetTime intNewH intNewM intNewS voidShowTime private intHour Minute Second 構(gòu)造函數(shù)和析構(gòu)函數(shù) 構(gòu)造函數(shù)的實(shí)現(xiàn) Clock Clock intNewH intNewM intNewS Hour NewH Minute NewM Second NewS 建立對(duì)象時(shí)構(gòu)造函數(shù)的作用 voidmain Clockc 0 0 0 隱含調(diào)用構(gòu)造函數(shù) 將初始值作為實(shí)參 c ShowTime 31 35 拷貝構(gòu)造函數(shù) 拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù) 其形參為本類的對(duì)象引用 class類名 public 類名 形參 構(gòu)造函數(shù)類名 類名 對(duì)象名 拷貝構(gòu)造函數(shù) 類名 類名 類名 對(duì)象名 拷貝構(gòu)造函數(shù)的實(shí)現(xiàn) 函數(shù)體 構(gòu)造函數(shù)和析構(gòu)函數(shù) 36 例5 2拷貝構(gòu)造函數(shù)舉例 includeusingnamespacestd classPoint public Point intxx 0 intyy 0 Point Point 構(gòu)造函數(shù)和析構(gòu)函數(shù) Point Point intxx intyy X xx Y yy cout 構(gòu)造函數(shù)被調(diào)用 endl Point Point Point 34 38 例5 2拷貝構(gòu)造函數(shù)舉例 當(dāng)用類的一個(gè)對(duì)象去初始化該類的另一個(gè)對(duì)象時(shí)系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)實(shí)現(xiàn)拷貝賦值 intmain void PointA 1 2 PointB A 拷貝構(gòu)造函數(shù)被調(diào)用cout B GetX B GetY endl return0 構(gòu)造函數(shù)和析構(gòu)函數(shù) 39 例5 2拷貝構(gòu)造函數(shù)舉例 若函數(shù)的形參為類對(duì)象 調(diào)用函數(shù)時(shí) 實(shí)參賦值給形參 系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù) 例如 voidfun1 Pointp cout p GetX p GetY endl intmain void PointA 1 2 fun1 A 調(diào)用拷貝構(gòu)造函數(shù)return0 構(gòu)造函數(shù)和析構(gòu)函數(shù) 40 拷貝構(gòu)造函數(shù) 例5 2 當(dāng)函數(shù)的返回值是類對(duì)象時(shí) 系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù) 例如 Pointfun2 PointA 1 2 returnA 調(diào)用拷貝構(gòu)造函數(shù) voidmain PointB B fun2 構(gòu)造函數(shù)和析構(gòu)函數(shù) 41 拷貝構(gòu)造函數(shù) 如果程序員沒有為類聲明拷貝初始化構(gòu)造函數(shù) 則編譯器自己生成一個(gè)拷貝構(gòu)造函數(shù) 這個(gè)構(gòu)造函數(shù)執(zhí)行的功能是 用作為初始值的對(duì)象的每個(gè)數(shù)據(jù)成員的值 初始化將要建立的對(duì)象的對(duì)應(yīng)數(shù)據(jù)成員 構(gòu)造函數(shù)和析構(gòu)函數(shù) 42 析構(gòu)函數(shù) 完成對(duì)象被刪除前的一些清理工作 在對(duì)象的生存期結(jié)束的時(shí)刻系統(tǒng)自動(dòng)調(diào)用它 然后再釋放此對(duì)象所屬的空間 如果程序中未聲明析構(gòu)函數(shù) 編譯器將自動(dòng)產(chǎn)生一個(gè)默認(rèn)的析構(gòu)函數(shù) 構(gòu)造函數(shù)和析構(gòu)函數(shù) 43 構(gòu)造函數(shù)和析構(gòu)函數(shù)舉例 includeusingnamespacestd classPoint public Point intxx intyy Point 其它函數(shù)原形private intX intY 構(gòu)造函數(shù)和析構(gòu)函數(shù) Point Point intxx intyy X xx Y yy Point Point 其它函數(shù)的實(shí)現(xiàn)略 41 45 類的應(yīng)用舉例 例5 3 一圓型游泳池如圖所示 現(xiàn)在需在其周圍建一圓型過道 并在其四周圍上柵欄 柵欄價(jià)格為35元 米 過道造價(jià)為20元 平方米 過道寬度為3米 游泳池半徑由鍵盤輸入 要求編程計(jì)算并輸出過道和柵欄的造價(jià) includeusingnamespacestd constfloatPI 3 14159 constfloatFencePrice 35 constfloatConcretePrice 20 聲明類Circle及其數(shù)據(jù)和方法classCircle private floatradius public Circle floatr 構(gòu)造函數(shù)floatCircumference 圓周長(zhǎng)floatArea 圓面積 43 類的實(shí)現(xiàn) 構(gòu)造函數(shù)初始化數(shù)據(jù)成員radiusCircle Circle floatr radius r 計(jì)算圓的周長(zhǎng)floatCircle Circumference return2 PI radius 計(jì)算圓的面積floatCircle Area returnPI radius radius 44 intmain floatradius floatFenceCost ConcreteCost 提示用戶輸入半徑cout radius 聲明Circle對(duì)象CirclePool radius CirclePoolRim radius 3 45 計(jì)算柵欄造價(jià)并輸出FenceCost PoolRim Circumference FencePrice cout FencingCostis FenceCost endl 計(jì)算過道造價(jià)并輸出ConcreteCost PoolRim Area Pool Area ConcretePrice cout ConcreteCostis ConcreteCost endl return0 運(yùn)行結(jié)果Entertheradiusofthepool 10FencingCostis 2858 85ConcreteCostis 4335 39 46 50 組合的概念 類中的成員數(shù)據(jù)是另一個(gè)類的對(duì)象 可以在已有的抽象的基礎(chǔ)上實(shí)現(xiàn)更復(fù)雜的抽象 類的組合 51 舉例 classPoint private floatx y 點(diǎn)的坐標(biāo)public Point floath floatv 構(gòu)造函數(shù)floatGetX void 取X坐標(biāo)floatGetY
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 提升幼兒戶外活動(dòng)質(zhì)量的策略與方法探討報(bào)告
- 2025至2030中國(guó)自動(dòng)乘客計(jì)數(shù)儀行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 海洋科技前沿:深海生物基因采樣器市場(chǎng)潛力評(píng)估
- 2025至2030中國(guó)膠囊內(nèi)鏡系統(tǒng)行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國(guó)聚合物復(fù)合軟管行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國(guó)網(wǎng)絡(luò)動(dòng)漫行業(yè)發(fā)展研究與產(chǎn)業(yè)戰(zhàn)略規(guī)劃分析評(píng)估報(bào)告
- 2025至2030中國(guó)綜合保稅區(qū)行業(yè)發(fā)展趨勢(shì)分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- 2025至2030中國(guó)統(tǒng)一通信管理行業(yè)市場(chǎng)深度研究及發(fā)展前景投資可行性分析報(bào)告
- 單斗液壓挖掘機(jī)在采礦行業(yè)的應(yīng)用設(shè)計(jì)
- 鋼結(jié)構(gòu)施工成本控制措施
- 天門山污水處理廠二期擴(kuò)建項(xiàng)目環(huán)境影響報(bào)告書
- 婦產(chǎn)科學(xué) 妊娠合并心臟病
- -衛(wèi)生資格-副高-疾病控制-副高-章節(jié)練習(xí)-慢性非傳染性疾病控制-試題(單選題)(共1125題)
- 骨質(zhì)疏松病人的護(hù)理
- 高中英語全國(guó)高考考綱詞匯3600匯總
- GB/T 35068-2018油氣管道運(yùn)行規(guī)范
- GB/T 13277.7-2021壓縮空氣第7部分:活性微生物含量測(cè)量方法
- 2023年婁底冷水江市廣播電視臺(tái)(融媒體中心)招聘筆試模擬試題及答案解析
- 特勞特戰(zhàn)略定位總裁課程課件
- 陳寶光-TTT課程開發(fā)與設(shè)計(jì)(講義)V2.1
- 六年級(jí)開學(xué)主題班會(huì)課件
評(píng)論
0/150
提交評(píng)論