第01章類和對(duì)象ppt課件_第1頁
第01章類和對(duì)象ppt課件_第2頁
第01章類和對(duì)象ppt課件_第3頁
第01章類和對(duì)象ppt課件_第4頁
第01章類和對(duì)象ppt課件_第5頁
已閱讀5頁,還剩60頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、LogoLogoAdd Your Company Slogan第第8章章 類類和和對(duì)對(duì)象象C+程序程序設(shè)計(jì)設(shè)計(jì)本章內(nèi)容本章內(nèi)容8.1 8.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述8.2 8.2 類的聲明和對(duì)象的定義類的聲明和對(duì)象的定義8.3 8.3 類的成員函數(shù)類的成員函數(shù)8.4 8.4 對(duì)象成員的援用對(duì)象成員的援用8.5 8.5 類和對(duì)象的簡(jiǎn)單運(yùn)用舉例類和對(duì)象的簡(jiǎn)單運(yùn)用舉例8.6 8.6 類的封裝性和信息隱蔽類的封裝性和信息隱蔽8.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述 面向?qū)ο蟪绦蛟O(shè)計(jì):把同一對(duì)象的數(shù)據(jù)和操作封裝在一同面向?qū)ο蟪绦蛟O(shè)計(jì):把同一對(duì)象的數(shù)據(jù)和操作封裝在

2、一同,運(yùn)用運(yùn)用對(duì)象、類、承繼、封裝、音訊等根本概念來進(jìn)展的程序設(shè)計(jì)。對(duì)象、類、承繼、封裝、音訊等根本概念來進(jìn)展的程序設(shè)計(jì)。例如:人們消費(fèi)汽車時(shí),發(fā)動(dòng)機(jī)、底盤、車身和輪子分別由不同消例如:人們消費(fèi)汽車時(shí),發(fā)動(dòng)機(jī)、底盤、車身和輪子分別由不同消費(fèi)廠商設(shè)計(jì)和制造,最后由汽車制造商組裝在一同。在組裝時(shí),費(fèi)廠商設(shè)計(jì)和制造,最后由汽車制造商組裝在一同。在組裝時(shí),各部分之間有一定的聯(lián)絡(luò),以便協(xié)調(diào)任務(wù),各部分內(nèi)部如何任各部分之間有一定的聯(lián)絡(luò),以便協(xié)調(diào)任務(wù),各部分內(nèi)部如何任務(wù)一無所知。務(wù)一無所知。為了進(jìn)一步闡明問題,下面先討論幾個(gè)有關(guān)的概念。為了進(jìn)一步闡明問題,下面先討論幾個(gè)有關(guān)的概念。OO = 對(duì)象對(duì)象 + 類

3、類 + 音訊音訊 + 承繼承繼 + 封裝封裝 + 多態(tài)多態(tài)8.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述1. 對(duì)象對(duì)象 對(duì)象是具有明顯邊境和含義的概念、籠統(tǒng)或?qū)ο笫蔷哂忻黠@邊境和含義的概念、籠統(tǒng)或事物,一個(gè)對(duì)象代表了一個(gè)現(xiàn)實(shí)的或虛擬的實(shí)體。事物,一個(gè)對(duì)象代表了一個(gè)現(xiàn)實(shí)的或虛擬的實(shí)體。自然實(shí)體自然實(shí)體概念實(shí)體概念實(shí)體軟件實(shí)體軟件實(shí)體化學(xué)過程化學(xué)過程銜接顯示銜接顯示8.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述1. 對(duì)象對(duì)象對(duì)象對(duì)象Object是包含客觀世界物體特征的籠是包含客觀世界物體特征的籠統(tǒng)實(shí)體統(tǒng)實(shí)體,客觀世界中任何一個(gè)事物都可以看成一個(gè)客觀世界中任何一個(gè)事物都可以看成一

4、個(gè)對(duì)象。對(duì)象可大可小。對(duì)象是構(gòu)成系統(tǒng)的根本單對(duì)象。對(duì)象可大可小。對(duì)象是構(gòu)成系統(tǒng)的根本單位。對(duì)象由屬性位。對(duì)象由屬性Attribute和行為和行為Action兩部分組成。兩部分組成。對(duì)象的兩個(gè)要素:屬性和行為。對(duì)象的兩個(gè)要素:屬性和行為。屬性:對(duì)象的特征,定義成員變量描畫。屬性:對(duì)象的特征,定義成員變量描畫。行為:對(duì)象的動(dòng)作,定義成員函數(shù)完成。行為:對(duì)象的動(dòng)作,定義成員函數(shù)完成。8.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述對(duì)象屬性舉例:對(duì)象屬性舉例:一個(gè)學(xué)生對(duì)象屬性:姓名、號(hào)碼、性別、職業(yè)、年級(jí)。一個(gè)學(xué)生對(duì)象屬性:姓名、號(hào)碼、性別、職業(yè)、年級(jí)。一個(gè)教師對(duì)象屬性:姓名、號(hào)碼、性別、職業(yè)

5、、職務(wù)。一個(gè)教師對(duì)象屬性:姓名、號(hào)碼、性別、職業(yè)、職務(wù)。一臺(tái)錄像機(jī)對(duì)象屬性:型號(hào)、品牌、體積、分量、價(jià)錢。一臺(tái)錄像機(jī)對(duì)象屬性:型號(hào)、品牌、體積、分量、價(jià)錢。一臺(tái)筆記本電腦對(duì)象的屬性:?一臺(tái)筆記本電腦對(duì)象的屬性:?8.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述對(duì)象行為舉例:對(duì)象行為舉例:一個(gè)學(xué)生對(duì)象行為:聽課、交作業(yè)、考試。一個(gè)學(xué)生對(duì)象行為:聽課、交作業(yè)、考試。一個(gè)教師對(duì)象行為:講課、改作業(yè)、監(jiān)考。一個(gè)教師對(duì)象行為:講課、改作業(yè)、監(jiān)考。一臺(tái)錄像機(jī)對(duì)象行為:錄像、播放、暫停、快進(jìn)、一臺(tái)錄像機(jī)對(duì)象行為:錄像、播放、暫停、快進(jìn)、停頓。停頓。一臺(tái)筆記本電腦的行為:?一臺(tái)筆記本電腦的行為:?8.

6、1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述 在一個(gè)系統(tǒng)中的多個(gè)對(duì)象之間經(jīng)過一定的渠道相在一個(gè)系統(tǒng)中的多個(gè)對(duì)象之間經(jīng)過一定的渠道相互聯(lián)絡(luò),如圖互聯(lián)絡(luò),如圖8.1表示。要使某一個(gè)對(duì)象實(shí)現(xiàn)某一種表示。要使某一個(gè)對(duì)象實(shí)現(xiàn)某一種行為行為(即操作即操作),該當(dāng)向它傳送相應(yīng)的音訊。對(duì)象之,該當(dāng)向它傳送相應(yīng)的音訊。對(duì)象之間就是這樣經(jīng)過發(fā)送和接納音訊相互聯(lián)絡(luò)的。間就是這樣經(jīng)過發(fā)送和接納音訊相互聯(lián)絡(luò)的。8.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述2、類、類 每一個(gè)實(shí)體都是對(duì)象。有一些對(duì)象是具有一每一個(gè)實(shí)體都是對(duì)象。有一些對(duì)象是具有一樣的構(gòu)造和行為的。每個(gè)對(duì)象都屬于一個(gè)特定的樣的構(gòu)造和行為的。

7、每個(gè)對(duì)象都屬于一個(gè)特定的類型。類型。 類類Class是一組具有一樣構(gòu)造和行為的對(duì)象是一組具有一樣構(gòu)造和行為的對(duì)象的集合。的集合。8.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述2、類、類類的舉例:類的舉例: 學(xué)生類、教師類、錄像機(jī)、筆記本電腦、汽學(xué)生類、教師類、錄像機(jī)、筆記本電腦、汽車、飲料、氣體、礦石、人、動(dòng)物車、飲料、氣體、礦石、人、動(dòng)物.如:如:10個(gè)不同尺寸的三角形是個(gè)不同尺寸的三角形是10個(gè)對(duì)象。這個(gè)對(duì)象。這10個(gè)三角個(gè)三角形對(duì)象有一樣的屬性構(gòu)造和行為,可以將它們籠統(tǒng)為形對(duì)象有一樣的屬性構(gòu)造和行為,可以將它們籠統(tǒng)為一種類型,稱為三角形類型。一種類型,稱為三角形類型。8.1 面

8、向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述3. 封裝與信息隱蔽封裝與信息隱蔽封裝:將有關(guān)的數(shù)據(jù)和操作代碼封裝在一個(gè)對(duì)象中,構(gòu)成一個(gè)根本封裝:將有關(guān)的數(shù)據(jù)和操作代碼封裝在一個(gè)對(duì)象中,構(gòu)成一個(gè)根本單位,各個(gè)對(duì)象之間相對(duì)獨(dú)立,互不干擾。單位,各個(gè)對(duì)象之間相對(duì)獨(dú)立,互不干擾。信息隱蔽:將對(duì)象中某些部分對(duì)外隱蔽,即隱蔽其內(nèi)部細(xì)節(jié),只留信息隱蔽:將對(duì)象中某些部分對(duì)外隱蔽,即隱蔽其內(nèi)部細(xì)節(jié),只留少量接口,以便與外界聯(lián)絡(luò),接納外界的音訊。少量接口,以便與外界聯(lián)絡(luò),接納外界的音訊。信息隱蔽有利于數(shù)據(jù)平安,防止無關(guān)的人了解和修正數(shù)據(jù)。信息隱蔽有利于數(shù)據(jù)平安,防止無關(guān)的人了解和修正數(shù)據(jù)。封裝可以降低復(fù)雜度和出錯(cuò)

9、的能夠性,提高類或模塊封裝可以降低復(fù)雜度和出錯(cuò)的能夠性,提高類或模塊的可重用性、隱藏性,運(yùn)用方便,易于維護(hù)。的可重用性、隱藏性,運(yùn)用方便,易于維護(hù)。8.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述3. 封裝與信息隱蔽封裝與信息隱蔽8.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述4. 承繼與派生承繼與派生 承繼是一種由已有的類創(chuàng)建新類的機(jī)制。子類從父承繼是一種由已有的類創(chuàng)建新類的機(jī)制。子類從父類承繼了共性,又派生出本人的各自的特性。類承繼了共性,又派生出本人的各自的特性。 父類父類-子類派生類子類派生類 將門虎子將門虎子承繼承繼8.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法

10、概述圓圓矩形矩形幾何形狀幾何形狀8.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述兼職技術(shù)人員銷售經(jīng)理管理人員銷售人員雇員8.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述 父類別可以被多個(gè)子類別承繼父類別可以被多個(gè)子類別承繼, 子類別也可以子類別也可以是別的類的父類,從而建立類承繼的層次構(gòu)造。是別的類的父類,從而建立類承繼的層次構(gòu)造。Cow類類Lion類類Tiger類類Animals類類Carnivorous類類Herbivorous類類Coat類類8.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述 C+提供了承繼機(jī)制,采用承繼的方法可以很方便提供了承繼機(jī)制,采用承繼的方法

11、可以很方便地利用一個(gè)已有的類建立一個(gè)新的類。這就是常說的地利用一個(gè)已有的類建立一個(gè)新的類。這就是常說的“軟件重用軟件重用(software reusability) 的思想。的思想。承繼的目的:實(shí)現(xiàn)代碼重用。承繼的目的:實(shí)現(xiàn)代碼重用。派生的目的:當(dāng)新的問題出現(xiàn),原有程序無法處理或派生的目的:當(dāng)新的問題出現(xiàn),原有程序無法處理或不能完全處理時(shí),需求對(duì)原有程序進(jìn)展改造。不能完全處理時(shí),需求對(duì)原有程序進(jìn)展改造。8.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述5. 多態(tài)性多態(tài)性由承繼而產(chǎn)生的相關(guān)的不同的類,其對(duì)象對(duì)同一音由承繼而產(chǎn)生的相關(guān)的不同的類,其對(duì)象對(duì)同一音訊會(huì)作出不同的呼應(yīng)。訊會(huì)作出不同

12、的呼應(yīng)。如:動(dòng)物都會(huì)叫,但不同的動(dòng)物的叫聲不同。如:動(dòng)物都會(huì)叫,但不同的動(dòng)物的叫聲不同。如:在如:在Windows環(huán)境下,用鼠標(biāo)雙擊一個(gè)文件對(duì)環(huán)境下,用鼠標(biāo)雙擊一個(gè)文件對(duì)象象(這就是向?qū)ο髠魉鸵粋€(gè)音訊這就是向?qū)ο髠魉鸵粋€(gè)音訊),根據(jù)文件對(duì)象,根據(jù)文件對(duì)象的不同,將做不同的操作。假設(shè)是可執(zhí)行文件,的不同,將做不同的操作。假設(shè)是可執(zhí)行文件,那么會(huì)執(zhí)行此程序;假設(shè)是文本文件,那么啟動(dòng)那么會(huì)執(zhí)行此程序;假設(shè)是文本文件,那么啟動(dòng)文本編輯器并翻開該文件。文本編輯器并翻開該文件。8.1.2 面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn)面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn)面向?qū)ο蟪绦蛟O(shè)計(jì)面對(duì)的是一個(gè)個(gè)對(duì)象。面向?qū)ο蟪绦蛟O(shè)計(jì)面對(duì)的是一個(gè)個(gè)對(duì)象。程

13、序設(shè)計(jì)者的義務(wù)包括兩個(gè)方面:程序設(shè)計(jì)者的義務(wù)包括兩個(gè)方面: (1)設(shè)計(jì)所需的各種類和對(duì)象,即決議把哪些數(shù)據(jù)和操作封裝在設(shè)計(jì)所需的各種類和對(duì)象,即決議把哪些數(shù)據(jù)和操作封裝在一同;一同;(2)思索怎樣向有關(guān)對(duì)象發(fā)送音訊,以完成所需的義務(wù)。這時(shí)他思索怎樣向有關(guān)對(duì)象發(fā)送音訊,以完成所需的義務(wù)。這時(shí)他好像一個(gè)總調(diào)度,不斷地向各個(gè)對(duì)象發(fā)出命令,讓這些對(duì)象活好像一個(gè)總調(diào)度,不斷地向各個(gè)對(duì)象發(fā)出命令,讓這些對(duì)象活動(dòng)起來動(dòng)起來(或者說激活這些對(duì)象或者說激活這些對(duì)象),完本錢人職責(zé)范圍內(nèi)的任務(wù)。,完本錢人職責(zé)范圍內(nèi)的任務(wù)。 各個(gè)對(duì)象的操作完成了,整體義務(wù)也就完成了。顯然,對(duì)一個(gè)各個(gè)對(duì)象的操作完成了,整體義務(wù)也就完

14、成了。顯然,對(duì)一個(gè)大型義務(wù)來說,面向?qū)ο蟪绦蛟O(shè)計(jì)方法是非常有效的,它能大大型義務(wù)來說,面向?qū)ο蟪绦蛟O(shè)計(jì)方法是非常有效的,它能大大降低程序設(shè)計(jì)人員的任務(wù)難度,減少出錯(cuò)時(shí)機(jī)。大降低程序設(shè)計(jì)人員的任務(wù)難度,減少出錯(cuò)時(shí)機(jī)。8.1.4 面向?qū)ο蟮能浖_發(fā)面向?qū)ο蟮能浖_發(fā) 隨著軟件規(guī)模的迅速增大,軟件人員面臨的問題非常復(fù)雜。需求規(guī)范整個(gè)軟件開發(fā)過程,明確軟件開發(fā)過程中每個(gè)階段的義務(wù),在保證前一個(gè)階段任務(wù)的正確性的情況下,再進(jìn)展下一階段的任務(wù)。這就是軟件工程學(xué)需求研討和處理的問題。面向?qū)ο蟮能浖こ贪ㄒ韵聨讉€(gè)部分:面向?qū)ο蟮能浖こ贪ㄒ韵聨讉€(gè)部分:8.1.4 面向?qū)ο蟮能浖_發(fā)面向?qū)ο蟮能浖_發(fā)8.2

15、 類的聲明和對(duì)象的定義類的聲明和對(duì)象的定義8.2.1對(duì)象和類的關(guān)系對(duì)象和類的關(guān)系每一個(gè)對(duì)象都是某一個(gè)類的實(shí)例;每一個(gè)對(duì)象都是某一個(gè)類的實(shí)例;每一個(gè)類在某一時(shí)辰都有零個(gè)或更多的實(shí)例;每一個(gè)類在某一時(shí)辰都有零個(gè)或更多的實(shí)例;類是靜態(tài)的,它們的存在、語義和關(guān)系在程序執(zhí)行前就曾類是靜態(tài)的,它們的存在、語義和關(guān)系在程序執(zhí)行前就曾經(jīng)定義好了;經(jīng)定義好了;對(duì)象是動(dòng)態(tài)的,它們?cè)诔绦驁?zhí)行時(shí)可以被創(chuàng)建和刪除;對(duì)象是動(dòng)態(tài)的,它們?cè)诔绦驁?zhí)行時(shí)可以被創(chuàng)建和刪除;類是籠統(tǒng)的,不占用內(nèi)存,而對(duì)象是詳細(xì)的,占用存儲(chǔ)空類是籠統(tǒng)的,不占用內(nèi)存,而對(duì)象是詳細(xì)的,占用存儲(chǔ)空間。在一開場(chǎng)時(shí)弄清對(duì)象和類的關(guān)系是非常重要的。間。在一開場(chǎng)時(shí)

16、弄清對(duì)象和類的關(guān)系是非常重要的。8.2 類的聲明和對(duì)象的定義類的聲明和對(duì)象的定義8.2.1對(duì)象和類的關(guān)系對(duì)象和類的關(guān)系白馬非馬白馬非馬對(duì)象和類對(duì)象和類 這是中國(guó)古代偉大的邏輯學(xué)家公孫龍約公這是中國(guó)古代偉大的邏輯學(xué)家公孫龍約公元前元前320-250年提出的一個(gè)著名的邏輯問題,年提出的一個(gè)著名的邏輯問題,出自出自。 類是對(duì)象的籠統(tǒng),而對(duì)象是類的詳細(xì)實(shí)例。類是對(duì)象的籠統(tǒng),而對(duì)象是類的詳細(xì)實(shí)例。8.2類的聲明和對(duì)象的定義類的聲明和對(duì)象的定義 8.2.2類的聲明類的聲明 在在C+中聲明一個(gè)類類型和聲明一個(gè)構(gòu)造體類型是類中聲明一個(gè)類類型和聲明一個(gè)構(gòu)造體類型是類似的。以前,定義構(gòu)造體類型,描畫一個(gè)對(duì)象似的。

17、以前,定義構(gòu)造體類型,描畫一個(gè)對(duì)象 :struct Student int num;char name20;char sex;Student stud1,stud2; /定義了兩個(gè)構(gòu)造體定義了兩個(gè)構(gòu)造體變量變量stud1和和stud2我們把一個(gè)對(duì)象能夠具有的動(dòng)作,參與到對(duì)象的描畫我們把一個(gè)對(duì)象能夠具有的動(dòng)作,參與到對(duì)象的描畫中,就構(gòu)成了類。中,就構(gòu)成了類。8.2.2 類的聲明類的聲明class Student /以以class開頭開頭 int num;char name20; char sex; /以上以上3行是數(shù)據(jù)成員行是數(shù)據(jù)成員 void display( ) /這是成員函數(shù)這是成員函數(shù)c

18、outnum:numendl;coutname:nameendl; coutsex:sexendl; /以上以上4行是函數(shù)中的操作語句行是函數(shù)中的操作語句 ;Student stud1,stud2; /定義了兩個(gè)定義了兩個(gè)Student 類的對(duì)象類的對(duì)象stud1和和stud2 可以看到聲明類的方法是由聲明構(gòu)造體類型的方法開展而來的。可以看到聲明類的方法是由聲明構(gòu)造體類型的方法開展而來的。8.2.2 類的聲明類的聲明class private: /私有成員,缺省存取權(quán)限私有成員,缺省存取權(quán)限 public: /公有成員公有成員 protected: /維護(hù)成員維護(hù)成員 ;8.2.2 類的聲明類

19、的聲明p類一經(jīng)定義就構(gòu)成了邊境,達(dá)成了封裝,就像建類一經(jīng)定義就構(gòu)成了邊境,達(dá)成了封裝,就像建 了一了一幢房子訪問修飾符的作用就是在房子上開窗,開門,幢房子訪問修飾符的作用就是在房子上開窗,開門,讓讓 他人可以訪問。他人可以訪問。訪問修飾符訪問修飾符8.2.2 類的聲明類的聲明訪問修飾符訪問修飾符不受任何限制,不受任何限制,本類或非本類均本類或非本類均可隨意訪問。可隨意訪問。public本類及其子類可以訪問本類及其子類可以訪問父子友好,同一個(gè)包父子友好,同一個(gè)包中的其它類也可訪問包中的其它類也可訪問包內(nèi)友好。內(nèi)友好。protected只需一樣包中的只需一樣包中的類可以訪問包類可以訪問包內(nèi)友好。內(nèi)

20、友好。缺缺 省省只需本類可以訪問,只需本類可以訪問,其他都不可以。其他都不可以。private8.2.2 類的聲明類的聲明publicprotectedprivate本類本類可以可以可以可以可以可以同包子類同包子類可以可以可以可以不可以不可以同包非子類同包非子類可以可以可以可以不可以不可以不同包子類不同包子類可以可以可以可以不可以不可以不同包且非子類不同包且非子類可以可以不可以不可以不可以不可以訪問修飾符訪問修飾符8.2.2 類的聲明類的聲明留意:留意: (1)在聲明類類型時(shí),聲明為在聲明類類型時(shí),聲明為private的成員和聲明為的成員和聲明為public的成員的次序恣意,既可以先出現(xiàn)的成員

21、的次序恣意,既可以先出現(xiàn)private部部分,也可以先出現(xiàn)分,也可以先出現(xiàn)public部分。部分。 (2)假設(shè)在類體中既不寫關(guān)鍵字假設(shè)在類體中既不寫關(guān)鍵字private,又不寫,又不寫public,就默以為,就默以為private。 (3)在一個(gè)類體中,關(guān)鍵字在一個(gè)類體中,關(guān)鍵字private和和public可以分可以分別出現(xiàn)多次。每個(gè)部分的有效范圍到出現(xiàn)另一個(gè)訪問限別出現(xiàn)多次。每個(gè)部分的有效范圍到出現(xiàn)另一個(gè)訪問限定符或類體終了時(shí)定符或類體終了時(shí)(最后一個(gè)右花括號(hào)最后一個(gè)右花括號(hào))為止。但是為了為止。但是為了使程序明晰,應(yīng)該養(yǎng)成這樣的習(xí)慣:使程序明晰,應(yīng)該養(yǎng)成這樣的習(xí)慣: 使每一種成員訪使每一

22、種成員訪問限定符在類定義體中只出現(xiàn)一次。問限定符在類定義體中只出現(xiàn)一次。8.2.2 類的聲明類的聲明可以將上面類可以將上面類Student的聲明改為的聲明改為class Student /聲明類類型聲明類類型 private: /聲明以下部分為私有聲明以下部分為私有的的int num;char name20; char sex; public: /聲明以下部分為公用聲明以下部分為公用的的void display( ) coutnum:numendl;coutname:nameendl;coutsex:sex id name major fees; ; Student stu1,stu2;8.2

23、.3 對(duì)象的定義對(duì)象的定義2. 在聲明類類型的同時(shí)定義對(duì)象在聲明類類型的同時(shí)定義對(duì)象class Studentprivate: int id;char name20; char major20; float fees; public:void register ( ) cin id name major fees; stud1,stud2; /定義了兩個(gè)定義了兩個(gè)Student類的對(duì)象類的對(duì)象在定義在定義Student類的同時(shí),定義了兩個(gè)類的同時(shí),定義了兩個(gè)Student 類類的對(duì)象。的對(duì)象。8.2.3 對(duì)象的定義對(duì)象的定義3. 不出現(xiàn)類名,直接定義對(duì)象不出現(xiàn)類名,直接定義對(duì)象class /無

24、類名無類名private: /聲明以下部分為私有的聲明以下部分為私有的. public: /聲明以下部分為公用的聲明以下部分為公用的. stud1, stud2; /定義了兩個(gè)無類名的類對(duì)象定義了兩個(gè)無類名的類對(duì)象這種方法很少用。在實(shí)踐的程序開發(fā)中,普通都采用第這種方法很少用。在實(shí)踐的程序開發(fā)中,普通都采用第1種方種方法。法。在定義一個(gè)對(duì)象時(shí),編譯系統(tǒng)會(huì)為這個(gè)對(duì)象分配存儲(chǔ)空間,以在定義一個(gè)對(duì)象時(shí),編譯系統(tǒng)會(huì)為這個(gè)對(duì)象分配存儲(chǔ)空間,以存放對(duì)象中的成員。存放對(duì)象中的成員。8.3 類的成員函數(shù)類的成員函數(shù)8.3.1 成員函數(shù)的性質(zhì)成員函數(shù)的性質(zhì)類的成員函數(shù)與普通函數(shù)的區(qū)別只是:類的成員函數(shù)與普通函數(shù)

25、的區(qū)別只是: 它是屬于一個(gè)它是屬于一個(gè)類的成員,出如今類體中。可以指定為類的成員,出如今類體中。可以指定為private、 public、protected成員函數(shù)可以訪問本類中任何成員成員函數(shù)可以訪問本類中任何成員(包括私有和公用數(shù)包括私有和公用數(shù)據(jù)和函數(shù)成員據(jù)和函數(shù)成員) 。8.3 類的成員函數(shù)類的成員函數(shù)如何指定類的成員函數(shù)為如何指定類的成員函數(shù)為public還是還是private?(1)普通將需求被外界調(diào)用的成員函數(shù)指定為普通將需求被外界調(diào)用的成員函數(shù)指定為public,它們是類的對(duì)外接口。它們是類的對(duì)外接口。(2)不被外界調(diào)用的,而只是為本類中的成員函數(shù)所不被外界調(diào)用的,而只是為本類

26、中的成員函數(shù)所調(diào)用的函數(shù),應(yīng)指定為調(diào)用的函數(shù),應(yīng)指定為private。這種函數(shù)的作用是。這種函數(shù)的作用是支持其他函數(shù)的操作,是類中其他成員的工具函數(shù),支持其他函數(shù)的操作,是類中其他成員的工具函數(shù),類外用戶不能調(diào)用這些私有的工具函數(shù)。類外用戶不能調(diào)用這些私有的工具函數(shù)。 8.3.2 在類外定義成員函數(shù)在類外定義成員函數(shù) 成員函數(shù)可以在類體中定義,也可以在類外定義。假設(shè)是在成員函數(shù)可以在類體中定義,也可以在類外定義。假設(shè)是在類外定義,類體中只寫成員函數(shù)的聲明,詳細(xì)函數(shù)定義而在類類外定義,類體中只寫成員函數(shù)的聲明,詳細(xì)函數(shù)定義而在類的外面進(jìn)展。如的外面進(jìn)展。如 :class Studentpriva

27、te:int id;char name20; char major20; float fees;public:void register ( ) ; /此處只做成員函數(shù)聲明此處只做成員函數(shù)聲明;void Student : register ( ) /成員函數(shù)的詳細(xì)定義成員函數(shù)的詳細(xì)定義cin id name majorfees; 8.3.2 在類外定義成員函數(shù)在類外定義成員函數(shù)p留意:留意:p類體中定義函數(shù)時(shí),不需求在函數(shù)名前面加上類名,由于函類體中定義函數(shù)時(shí),不需求在函數(shù)名前面加上類名,由于函數(shù)屬于哪一個(gè)類是不言而喻的。數(shù)屬于哪一個(gè)類是不言而喻的。p成員函數(shù)在類外定義時(shí),必需在函數(shù)名前面加

28、上類名,予以成員函數(shù)在類外定義時(shí),必需在函數(shù)名前面加上類名,予以限定限定(qualifed),“ 是作用域限定符是作用域限定符(field qualifier)或稱作用域運(yùn)算符,用它聲明函數(shù)是屬于哪個(gè)或稱作用域運(yùn)算符,用它聲明函數(shù)是屬于哪個(gè)類的。類的。p假設(shè)在作用域運(yùn)算符假設(shè)在作用域運(yùn)算符“ 的前面沒有類名,或者函數(shù)名前的前面沒有類名,或者函數(shù)名前面既無類名又無作用域運(yùn)算符面既無類名又無作用域運(yùn)算符“ ,如,如 p display( ) 或或 display( )p 那么表示那么表示display函數(shù)不屬于任何類,這個(gè)函數(shù)不是成員函數(shù)不屬于任何類,這個(gè)函數(shù)不是成員函數(shù),而是全局函數(shù),即普通普通

29、函數(shù)。函數(shù),而是全局函數(shù),即普通普通函數(shù)。8.3.2 在類外定義成員函數(shù)在類外定義成員函數(shù)p留意:留意:p類體中作原型聲明,然后在類外定義,類體的位置類體中作原型聲明,然后在類外定義,類體的位置應(yīng)在函數(shù)定義之前,否那么編譯時(shí)會(huì)出錯(cuò)。應(yīng)在函數(shù)定義之前,否那么編譯時(shí)會(huì)出錯(cuò)。p在類的內(nèi)部對(duì)成員函數(shù)作聲明,而在類體外定義成在類的內(nèi)部對(duì)成員函數(shù)作聲明,而在類體外定義成員函數(shù),這是程序設(shè)計(jì)的一種良好習(xí)慣。員函數(shù),這是程序設(shè)計(jì)的一種良好習(xí)慣。8.3.4 成員函數(shù)的存儲(chǔ)方式成員函數(shù)的存儲(chǔ)方式p用一段空間存放共同的函數(shù)代碼段,在調(diào)用各對(duì)象用一段空間存放共同的函數(shù)代碼段,在調(diào)用各對(duì)象的函數(shù)時(shí),都去調(diào)用這個(gè)公用的函

30、數(shù)代碼。的函數(shù)時(shí),都去調(diào)用這個(gè)公用的函數(shù)代碼。p每個(gè)對(duì)象占用的存儲(chǔ)空間只是該對(duì)象的數(shù)據(jù)部分所每個(gè)對(duì)象占用的存儲(chǔ)空間只是該對(duì)象的數(shù)據(jù)部分所占用的存儲(chǔ)空間,而不包括函數(shù)代碼所占用的存儲(chǔ)占用的存儲(chǔ)空間,而不包括函數(shù)代碼所占用的存儲(chǔ)空間。空間。一個(gè)對(duì)象所占的空間大小只取決于該對(duì)象中數(shù)據(jù)成員所占的空間,一個(gè)對(duì)象所占的空間大小只取決于該對(duì)象中數(shù)據(jù)成員所占的空間,而與成員函數(shù)無關(guān)。函數(shù)代碼是存儲(chǔ)在對(duì)象空間之外的。而與成員函數(shù)無關(guān)。函數(shù)代碼是存儲(chǔ)在對(duì)象空間之外的。#includeusing namespace std;class Timeint hour;int minute;int sec; public:

31、void set( )cin hour minute sec;int main() coutsizeof(Time)endl; return 0;8.4 對(duì)象成員的援用對(duì)象成員的援用 在程序中經(jīng)常需求訪問對(duì)象中的成員。訪問對(duì)象在程序中經(jīng)常需求訪問對(duì)象中的成員。訪問對(duì)象中的成員可以有中的成員可以有3種方法:種方法: 經(jīng)過對(duì)象名和成員運(yùn)算符訪問對(duì)象中的成員經(jīng)過對(duì)象名和成員運(yùn)算符訪問對(duì)象中的成員;經(jīng)過指向?qū)ο蟮闹羔樤L問對(duì)象中的成員經(jīng)過指向?qū)ο蟮闹羔樤L問對(duì)象中的成員;經(jīng)過對(duì)象的援用變量訪問對(duì)象中的成員。經(jīng)過對(duì)象的援用變量訪問對(duì)象中的成員。8.4.1 經(jīng)過對(duì)象名和成員運(yùn)算符訪問對(duì)象中的成員經(jīng)過對(duì)象名和成

32、員運(yùn)算符訪問對(duì)象中的成員訪問對(duì)象中成員的普通方式訪問對(duì)象中成員的普通方式:對(duì)象名對(duì)象名.成員名成員名 不僅可以在類外援用對(duì)象的公用數(shù)據(jù)成員,而且不僅可以在類外援用對(duì)象的公用數(shù)據(jù)成員,而且還可以調(diào)用對(duì)象的公用成員函數(shù),但同樣必需指出還可以調(diào)用對(duì)象的公用成員函數(shù),但同樣必需指出對(duì)象名,如對(duì)象名,如stud1. register ( ) ; /正確,調(diào)用對(duì)象正確,調(diào)用對(duì)象stud1的公用成員函數(shù)的公用成員函數(shù)register ( ); /錯(cuò)誤,沒有指明是哪一個(gè)對(duì)象的錯(cuò)誤,沒有指明是哪一個(gè)對(duì)象的register函數(shù)函數(shù)由于沒有指明對(duì)象名,編譯時(shí)把由于沒有指明對(duì)象名,編譯時(shí)把register()作為普通

33、作為普通函數(shù)處置。函數(shù)處置。8.4 對(duì)象成員的援用對(duì)象成員的援用只能訪問只能訪問public成員,而不能訪問成員,而不能訪問private成員,假成員,假設(shè)已定義設(shè)已定義id為私有數(shù)據(jù)成員,下面的語句是錯(cuò)誤的:為私有數(shù)據(jù)成員,下面的語句是錯(cuò)誤的: stud1.id=10101; /num是私有數(shù)據(jù)成員,不能被外界援用是私有數(shù)據(jù)成員,不能被外界援用 在類外只能調(diào)用公用的成員函數(shù)。在一個(gè)類中該當(dāng)至在類外只能調(diào)用公用的成員函數(shù)。在一個(gè)類中該當(dāng)至少有一個(gè)公用的成員函數(shù),作為對(duì)外的接口,否那么少有一個(gè)公用的成員函數(shù),作為對(duì)外的接口,否那么就無法對(duì)對(duì)象進(jìn)展任何操作。就無法對(duì)對(duì)象進(jìn)展任何操作。8.4.2 經(jīng)

34、過指向?qū)ο蟮闹羔樤L問對(duì)象中的成員經(jīng)過指向?qū)ο蟮闹羔樤L問對(duì)象中的成員假設(shè)有以下程序段:假設(shè)有以下程序段: class Timepublic: /數(shù)據(jù)成員是公用的數(shù)據(jù)成員是公用的int hour;int minute;Time t,*p; /定義對(duì)象定義對(duì)象t和指針變和指針變量量pp=&t; /使使p指向?qū)ο笾赶驅(qū)ο髏couthour; /輸出輸出p指向的對(duì)指向的對(duì)象中的成員象中的成員hour在在p指向指向t的前提下,的前提下,p-hour,(*p).hour和和t.hour三者等價(jià)。三者等價(jià)。8.4.3 經(jīng)過對(duì)象的援用變量來訪問對(duì)象中的成員經(jīng)過對(duì)象的援用變量來訪問對(duì)象中的成員假設(shè)已聲明了

35、假設(shè)已聲明了Time類,并有以下定義語句:類,并有以下定義語句: Time t1; /定義對(duì)象定義對(duì)象t1Time &t2=t1; /定義定義Time類援用變量類援用變量t2,并使之初始化為,并使之初始化為t1coutt2.hour; /輸出對(duì)象輸出對(duì)象t1中的成員中的成員hourt2與與t1共占同一段存儲(chǔ)單元共占同一段存儲(chǔ)單元(即即t2是是t1的別名的別名),因此因此t2.hour就是就是t1.hour。8.5類和對(duì)象的簡(jiǎn)單運(yùn)用舉例類和對(duì)象的簡(jiǎn)單運(yùn)用舉例例例8.1 最簡(jiǎn)單的例子。最簡(jiǎn)單的例子。#include using namespace std;class Time public

36、: /數(shù)據(jù)成員為公用的數(shù)據(jù)成員為公用的 int hour; int minute; int sec;int main( ) Time t1; /定義定義t1為為Time類對(duì)象類對(duì)象cint1.hour; /輸入設(shè)定的時(shí)間輸入設(shè)定的時(shí)間cint1.minute;cint1.sec;coutt1.hour:t1.minute:t1.secendl; return 0;例例8.2 援用多個(gè)對(duì)象的成員。援用多個(gè)對(duì)象的成員。1 程序程序(a)#include using namespace std;class Timepublic:int hour;int minute;int sec;int main

37、( )Time t1; /定義對(duì)象定義對(duì)象t1cint1.hour; cint1.minute;cint1.sec;coutt1.hour:t1.minute:t1.sect2.hour; /向向t2的數(shù)據(jù)成員輸入數(shù)據(jù)的數(shù)據(jù)成員輸入數(shù)據(jù)cint2.minute;cint2.sec;coutt2.hour:t2.minute:t2.secendl; return 0;例例8.2 援用多個(gè)對(duì)象的成員。援用多個(gè)對(duì)象的成員。1 程序程序(a)#include using namespace std;class Timepublic:int hour;int minute;int sec;int mai

38、n( )void set_time(Time &); /函數(shù)聲明函數(shù)聲明void show_time(Time &); /函數(shù)聲明函數(shù)聲明Time t1; /定義定義t1為為Time類對(duì)象類對(duì)象set_time(t1); /調(diào)用函數(shù),向調(diào)用函數(shù),向t1對(duì)象中的數(shù)據(jù)成員輸入數(shù)據(jù)對(duì)象中的數(shù)據(jù)成員輸入數(shù)據(jù)show_time(t1); /調(diào)用調(diào)用show_time函數(shù),輸出函數(shù),輸出t1對(duì)象中的數(shù)據(jù)對(duì)象中的數(shù)據(jù)Time t2; /定義定義t2為為Time類對(duì)象類對(duì)象set_time(t2); show_time(t2); return 0;void set_time(Time &

39、;t) /定義函數(shù)定義函數(shù)set_time,形參,形參t是援用變量是援用變量 cint.hour; /輸入設(shè)定的時(shí)間輸入設(shè)定的時(shí)間 cint.minute; cint.sec;void show_time(Time &t) /定義函數(shù)定義函數(shù)show_time,形參,形參t是援用變量是援用變量coutt.hour:t.minute:t.sec endl; /輸出對(duì)象中的數(shù)據(jù)輸出對(duì)象中的數(shù)據(jù)例例8.3 將例將例8.2的程序改用含成員函數(shù)的類來處置。的程序改用含成員函數(shù)的類來處置。#include using namespace std;class Timepublic:void set_

40、time( ); /公用成員函數(shù)公用成員函數(shù)void show_time( ); /公用成員函數(shù)公用成員函數(shù)private: /數(shù)據(jù)成員為私有數(shù)據(jù)成員為私有int hour;int minute;int sec;int main( )Time t1; /定義對(duì)象定義對(duì)象t1 t1.set_time( ); /調(diào)用對(duì)象調(diào)用對(duì)象t1的成員函數(shù)的成員函數(shù)set_time,向,向t1的數(shù)據(jù)成員輸入數(shù)據(jù)的數(shù)據(jù)成員輸入數(shù)據(jù)t1.show_time( ); /調(diào)用對(duì)象調(diào)用對(duì)象t1的成員函數(shù)的成員函數(shù)show_time,輸出,輸出t1的數(shù)據(jù)成員的值的數(shù)據(jù)成員的值Time t2; /定義對(duì)象定義對(duì)象t2t2.s

41、et_time( ); t2.show_time( ); return 0;void Time set_time( ) /在類外定義在類外定義set_time函數(shù)函數(shù) cinhour; cinminute; cinsec;void Time show_time( ) /在類外定義在類外定義show_time函數(shù)函數(shù) couthour:minute:secendl;#include #include using namespace std;using namespace std;class Timeclass Time void set_time(void); void set_time(voi

42、d); void show_time(void); void show_time(void); int hour; int hour; int minute; int minute; int sec; int sec; ;Time t;Time t;int main( )int main( ) set_time(); show_time(); return 0; set_time(); show_time(); return 0; int set_time(void) int set_time(void) cint.hour; cint.minute; cint.sec; cint.hour;

43、 cint.minute; cint.sec; int show_time(void) int show_time(void) coutt.hour:t.minute:t.secendl; coutt.hour:t.minute:t.secendl;P261P261第第1 1題題P261P261第第2 2題題P261P261第第3 3題題8.6 類的封裝性和信息隱蔽類的封裝性和信息隱蔽8.6.1 公用接口與私有實(shí)現(xiàn)的分別公用接口與私有實(shí)現(xiàn)的分別 從前面的引見知:從前面的引見知: C+經(jīng)過類來實(shí)現(xiàn)封裝經(jīng)過類來實(shí)現(xiàn)封裝性,把數(shù)據(jù)和與這些數(shù)據(jù)有關(guān)的操作封裝在一個(gè)性,把數(shù)據(jù)和與這些數(shù)據(jù)有關(guān)的操作封裝在

44、一個(gè)類中,或者說,類的作用是把數(shù)據(jù)和算法封裝在類中,或者說,類的作用是把數(shù)據(jù)和算法封裝在用戶聲明的籠統(tǒng)數(shù)據(jù)類型中。用戶聲明的籠統(tǒng)數(shù)據(jù)類型中。 在聲明了一個(gè)類以后,用戶主要是經(jīng)過調(diào)用在聲明了一個(gè)類以后,用戶主要是經(jīng)過調(diào)用公用的成員函數(shù)來實(shí)現(xiàn)類提供的功能公用的成員函數(shù)來實(shí)現(xiàn)類提供的功能(例如對(duì)數(shù)例如對(duì)數(shù)據(jù)成員設(shè)置值,顯示數(shù)據(jù)成員的值,對(duì)數(shù)據(jù)進(jìn)展據(jù)成員設(shè)置值,顯示數(shù)據(jù)成員的值,對(duì)數(shù)據(jù)進(jìn)展加工等加工等)。因此,公用成員函數(shù)是用戶運(yùn)用類的。因此,公用成員函數(shù)是用戶運(yùn)用類的公用接口公用接口(public interface),或者說是類的,或者說是類的對(duì)外接口。對(duì)外接口。8.6 類的封裝性和信息隱蔽類的封

45、裝性和信息隱蔽 類中被操作的數(shù)據(jù)是私有的,實(shí)現(xiàn)的細(xì)節(jié)對(duì)用戶是隱蔽的,類中被操作的數(shù)據(jù)是私有的,實(shí)現(xiàn)的細(xì)節(jié)對(duì)用戶是隱蔽的,這種實(shí)現(xiàn)稱為私有實(shí)現(xiàn)這種實(shí)現(xiàn)稱為私有實(shí)現(xiàn)(private implementation)。這種。這種“類的公用接口與私有實(shí)現(xiàn)的分別構(gòu)成了信息隱蔽。類的公用接口與私有實(shí)現(xiàn)的分別構(gòu)成了信息隱蔽。 軟件工程的一個(gè)最根本的原那么就是將接口與實(shí)現(xiàn)分別,軟件工程的一個(gè)最根本的原那么就是將接口與實(shí)現(xiàn)分別,信息隱蔽是軟件工程中一個(gè)非常重要的概念。它的益處在于:信息隱蔽是軟件工程中一個(gè)非常重要的概念。它的益處在于: (1) 假設(shè)想修正或擴(kuò)展類的功能,只需修正本類中有關(guān)的數(shù)據(jù)成假設(shè)想修正或擴(kuò)展類的功能,只需修正本類中有關(guān)的數(shù)據(jù)成員和與它有關(guān)的成員函數(shù),程序中類外的部分可以不用修正。員和與它有關(guān)的成員函數(shù),程序中類外的部分可以不用修正。(2) 假設(shè)在編譯時(shí)發(fā)現(xiàn)類中的數(shù)據(jù)讀寫有錯(cuò),不用檢查整個(gè)程序,假設(shè)在編譯時(shí)發(fā)現(xiàn)類中的數(shù)據(jù)讀寫有錯(cuò),不用檢查整個(gè)程序,只需檢查本類中訪問這些數(shù)據(jù)的少數(shù)成員函數(shù)。只需檢查本類

溫馨提示

  • 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. 人人文庫(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)論