

下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、面向?qū)ο蟮某绦蛟O(shè)計(jì) 第九章 類和對(duì)象 按鈕對(duì)象: 按鈕的內(nèi)容、大小,按鈕的字體、圖案等等 針對(duì)按鈕的各種操作,創(chuàng)建、單擊、雙擊、拖動(dòng) 班級(jí)對(duì)象: 班級(jí)的靜態(tài)特征,所屬的系和專業(yè)、班級(jí)的人數(shù), 所在的教室等。這種靜態(tài)特征稱為屬性; 班級(jí)的動(dòng)態(tài)特征,如學(xué)習(xí)、開會(huì)、體育比賽等, 這種動(dòng)態(tài)特征稱為行為。4 任何一個(gè)對(duì)象都應(yīng)當(dāng)具有這兩個(gè)要素,一是屬性 (attribute)(attribute);二是行為(behavior)(behavior), ,即能根據(jù)外界給 的信息進(jìn)行相應(yīng)的操作。對(duì)象是由一組屬性和 組行為構(gòu)成的。 面向?qū)ο蟮某绦蛟O(shè)計(jì)采用了以上人們所熟悉的這 種思路。使用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法設(shè)計(jì)
2、一個(gè) 復(fù)雜的軟件系統(tǒng)時(shí),首要的問題是確定該系統(tǒng)是 由哪些對(duì)象組成的,并且設(shè)計(jì)這些對(duì)象。在 C+C+中, 每個(gè)對(duì)象都是由數(shù)據(jù)和函數(shù)(即操作代碼)這兩部分 組成的。 我們可以對(duì)一個(gè)對(duì)象進(jìn)行封裝處理,把它的 一部分屬性和功能對(duì)外界屏蔽,也就是說從 外界是看不到的、甚至是不可知的。 使用對(duì)象的人完全可以不必知道對(duì)象內(nèi)部的 具體細(xì)節(jié),只需了解其外部功能即可自如地 操作對(duì)象。 把對(duì)象的內(nèi)部實(shí)現(xiàn)和外部行為分隔開來。I! 傳統(tǒng)的面向過程程序設(shè)計(jì)是圍繞功能進(jìn)行的,用 一個(gè)函數(shù)實(shí)現(xiàn)一個(gè)功能。所有的數(shù)據(jù)都是公用的, 一個(gè)函數(shù)可以使用任何一組數(shù)據(jù),而一組數(shù)據(jù)又 能被多個(gè)函數(shù)所使用。程序設(shè)計(jì)者必須考慮每一 個(gè)細(xì)節(jié),什么
3、時(shí)候?qū)κ裁磾?shù)據(jù)進(jìn)行操作。 面向?qū)ο蟪绦蛟O(shè)計(jì)采取的是另外一種思路。它面 對(duì)的是一個(gè)個(gè)對(duì)象。實(shí)際上,每一組數(shù)據(jù)都是有 特定的用途的,是某種操作的對(duì)象。也就是說, 一組操作調(diào)用一組數(shù)據(jù)。 程序設(shè)計(jì)者的任務(wù)包括兩個(gè)方面:一是 設(shè)計(jì)所需的各種類和對(duì)象,即決定把哪些數(shù) 據(jù)和操作封裝在一起;二是考慮怎樣向有關(guān) 對(duì)象發(fā)送消息,以完成所需的任務(wù)。各個(gè)對(duì) 象的操作完成了,整體任務(wù)也就完成了。 因此人們?cè)O(shè)想把相關(guān)的數(shù)據(jù)和操作放在 一起,形成一個(gè)整體與外界相對(duì)分隔。這 就是 面向?qū)ο蟮某绦蛟O(shè)計(jì)中的對(duì)象。8 在面向過程的結(jié)構(gòu)化程序設(shè)計(jì)中,人們常使 用這樣的公式來表述程序: 程序二算法+數(shù)據(jù)結(jié)構(gòu) 面向?qū)ο蟮某绦蚪M成: 對(duì)
4、象二算法+數(shù)據(jù)結(jié)構(gòu) 程序=(對(duì)象+對(duì)象+對(duì)象+)+消息 消息的作用就是對(duì)對(duì)象的控制O 程序設(shè)計(jì)的關(guān)鍵是設(shè)計(jì)好每一個(gè)對(duì)象以及確 定向這些對(duì)象發(fā)出的命令,使各對(duì)象完成相 應(yīng)的操作。 每一個(gè)實(shí)體都是對(duì)象。有一些對(duì)象是具有相 同的結(jié)構(gòu)和特性的。 每個(gè)對(duì)象都屬于一個(gè)特定的類型。 在 C+C+中對(duì)象的類型稱為類( (class) oclass) o 類代表 了某一批對(duì)象的共性和特征。類是對(duì)象的抽 象,而對(duì)象是類的具體實(shí)例(instance)(instance)。 類的定義 類是一種復(fù)雜的數(shù)據(jù)類型,它是將不同類型 的數(shù)據(jù)和與這些數(shù)據(jù)相關(guān)的運(yùn)算封裝在一起 的集合體。 類將一些數(shù)據(jù)及與數(shù)據(jù)相關(guān)的函數(shù)封裝在一 起
5、,使類中的數(shù)據(jù)得到很好的“保護(hù)”。在 大型程序中不會(huì)被隨意修改。 用關(guān)鍵字 priviatepriviate 限定的成員稱為私有成員, 對(duì)私有成員限定在該類的內(nèi)部使用,即只 允許該類中的成員函數(shù)使用私有的成員數(shù) 據(jù),對(duì)于私有的成員函數(shù),只能被該類內(nèi) 的成員函數(shù)調(diào)用;類就相當(dāng)于私有成員的 作用域。 私有 保護(hù) 分號(hào)不能少 class Student private : char Name20; float 用關(guān)鍵字 publicpublic 限定的成員稱為公有成員, 公有成員的數(shù)據(jù)或函數(shù)不受類的限制,可以 在類內(nèi)或類外自由使用;對(duì)類而言是透明的。 而用關(guān)鍵字 protectedprotected
6、 所限定的成員稱為保護(hù) 成員,只允許在類內(nèi)及該類的派生類中使用 保護(hù)的數(shù)據(jù)或函數(shù)。即保護(hù)成員的作用域是 該類及該類的派生類。 私孚r r成員 公有成員 保護(hù)成員 類內(nèi)函數(shù) 可以調(diào)用 可以調(diào)用 可以調(diào)用 類外函數(shù) 不可調(diào)用 可以調(diào)用 不可調(diào)用 私有函數(shù) 公有函數(shù) 保護(hù)函數(shù) 類內(nèi)函數(shù) 可以調(diào)用 可以調(diào)用 可以調(diào)用 類外函數(shù) 不可調(diào)用 可以調(diào)用 不可調(diào)用 每一個(gè)限制詞(privateprivate 等)在類體中可使用多 次。一旦使用了限制詞,該限制詞一直有效, 直到下一個(gè)限制詞開始為止。 如果未加說明,類中成員默認(rèn)的訪問權(quán)限是 private,private,即私有的。 class Student
7、public : float average; void SetName(char *name); void SetMath(float math); void SetChinese(float ch); float GetAverage(void); class A float x,y; public: void Setxy(float a,float b) x=a; y=b; void Print(void) 均為私有權(quán)限 char Name20; float Math; float Chiese; 均為公有權(quán)限 ; y SetxyQ cout x y y endl; ; 在類外不能直接使
8、用 x x 或 y y 必須通過 Setxy()Setxy()給 x x 或 y y 賦值, 通過 PrintPrint。輸出 x x 或 y y。 20 成員函數(shù)與成員數(shù)據(jù)的定義不分先后,可以先說 明函數(shù)原型,再在類體外定義函數(shù)體。 class A float x, y; public: void Setxy(float a,float b) x=a; y=b; Print(void) 在類體內(nèi)定 義成員函數(shù) cout x y endl; ; 19 class A float x,y; public: void Setxy(float a,float b); void Print(void)
9、; J , void A:Setxy(float a,float b), x=a; y=b; J void A:Print(void) 在類體外定 義成員函數(shù) cout x t yendl; 22 在類體外定義成員函數(shù)的格式: v class_name : (v 參數(shù)表) 函數(shù)體 void void A:A: 函數(shù)體 在定義一個(gè)類時(shí),要注意如下幾點(diǎn): 1、類具有封裝性,并且類只是定義了一種結(jié)構(gòu)(樣板) 所以類中的任何成員數(shù)據(jù)均不能使用關(guān)鍵字 extern, auto 或registei限定其存儲(chǔ)類型。 2、在定義類時(shí),只是定義了一種導(dǎo)出的數(shù)據(jù)類型,并不 為類分配存儲(chǔ)空間,所以,在定義類中的數(shù)據(jù)
10、成員時(shí), 不能對(duì)其初始化。如: class Test int x=5,y=6; 是不允許的 類 形參b)b) 函數(shù)23 extern float x; 是不允許的 在 C+語(yǔ)言中,結(jié)構(gòu)體類型只是類的一個(gè)特 例。結(jié)構(gòu)體類型與類的唯一的區(qū)別在于:在 類中,其成員的缺省的存取權(quán)限是私有的; 而在結(jié)構(gòu)體類型中,其成員的缺省的存取權(quán) 限是公有的。 23 內(nèi)聯(lián)成員函數(shù) 當(dāng)我們定義一個(gè)類時(shí),可以在類中直接定義函數(shù)體。這時(shí)成員函 數(shù)在編譯時(shí)是作為內(nèi)聯(lián)函數(shù)來實(shí)現(xiàn)的。 同時(shí),我們也可以在類體外定義類的內(nèi)聯(lián)成員函數(shù),在類體內(nèi)說明 函數(shù),在類體外定義時(shí),在成員函數(shù)的定義前面加上關(guān)鍵字inlineo 說明該成員函數(shù)為內(nèi)
11、聯(lián) float x, y; inline void A:Setxy(float afloat b) public: x=a; y=b; void Setxy(float a.float b); inline void A:Print(void) void Print(void); cout x y endl; ;26 對(duì)象 在定義類時(shí),只是定義了一種數(shù)據(jù)類型,即說明程 序中可能會(huì)出現(xiàn)該類型的數(shù)據(jù),并不為類分配存儲(chǔ) 空間。 只有在定義了屬于類的變量后,系統(tǒng)才會(huì)為類的 變量分配空間。 類的變量我們稱之為對(duì)象。 對(duì)象是類的實(shí)例,定義對(duì)象之前,一定要先說明該 對(duì)象的類。 不同對(duì)象占據(jù)內(nèi)存中的不同區(qū)域,
12、它們所保存的 數(shù)據(jù)各不相同,但對(duì)成員數(shù)據(jù)進(jìn)行操作的成員函 數(shù)的程序代碼均是一樣的。 對(duì)象的定義格式: 存儲(chǔ)類型類名對(duì)象 1,對(duì)象 2,; 在建立對(duì)象時(shí),只為對(duì)象分配用于保存數(shù)據(jù)成員的內(nèi)存空 間,而成員函數(shù)的代碼為該類的每一個(gè)對(duì)象所共享。25 28 對(duì)象的定義方法同結(jié)構(gòu)體定義變量的方法一樣, 也分三種,當(dāng)類中有數(shù)據(jù)成員的訪問權(quán)限為私有 時(shí),不允許對(duì)對(duì)象進(jìn)行初始化。 class A float x,y; public: void Setxy( float a, float b ) x=a; y=b; void Print(void) mfv寸負(fù)簞 vend ; J( (Mrnhin(void) 2
13、7 對(duì)象的使用 一個(gè)對(duì)象的成員就是該對(duì)象的類所定義的成員, 有成員數(shù)據(jù)和成員函數(shù), 引用時(shí)同結(jié)構(gòu)體變量類 似, 用“”運(yùn)算符。定義全局對(duì)象 a3,a4: 定義局部30 class A float x,y; public: float m,n; void Setxy( float a, float b ) x=a; y=b; n void Print(void) cout x y endl; ; void main(void) A al,a2; 定義對(duì)象 al.m=10; al.n=20; 為公有成員數(shù)據(jù)賦值 al.Setxy(2.0,5.0); 為私有成員數(shù)據(jù)賦值 al.Print(); 輸出
14、:2 2 5 5 用成員選擇運(yùn)算符“”只能訪問對(duì)象的公有 成員,而不能訪問對(duì)象的私有成員或保護(hù)成 員。若要訪問對(duì)象的私有的數(shù)據(jù)成員,只能 通過對(duì)象的公有成員函數(shù)來獲取。2.0 5.0 10 20 Setxy() Print() SetxyQ Printt) a2 x 32 class A float x,y; public: float m,n; void Setxy( float a, float b ) x=a; y=b; r void Print(void) 、 cout x t y endl; ; void main(void) 31 同類型的對(duì)象之間可以整體賦值,這種賦值與對(duì)象的成員
15、的訪問 權(quán)限無關(guān)。 class A float x,y; public: float m9n; void Setxy( float float b ) x=a; y=b; void Print(void) cout x P y endl; ; void main(void) A al9a2; al.m=10; aln=20; 為公有成員數(shù)據(jù)賦值 必須通過類內(nèi)公有函 數(shù)訪問私有數(shù)據(jù)成員 A al,a2; al.m=10; al.nal.x=非法,al.Setxy(2.0,5.0); | a2=al; 同類型的對(duì)象之 相當(dāng)于成員數(shù) 據(jù)間相互賦值 34 對(duì)象可以作函數(shù)的入口參數(shù)(實(shí)參、形參),也 可
16、以作函數(shù)的出口參數(shù)。這與一般變量作為函數(shù) 的參數(shù)是完全相同的。 可以定義類類型的指針,類類型的引用,對(duì)象數(shù) 組,指向類類型的指針數(shù)組和指向一維或多維數(shù) 組的指針變量 一個(gè)類的對(duì)象,可作為另一個(gè)類的成員 33 類作用域、類類型的作用域和對(duì)象的作用域 類體的區(qū)域稱為類作用域。類的成員函數(shù)與 成員數(shù)據(jù),其作用域都是屬于類的作用域, 僅在該類的范圍內(nèi)有效,故不能在主函數(shù)中 直接通過函數(shù)名和成員名來調(diào)用函數(shù)。36 class A float x,y; public: float m9n; void Setxy( float a, float b ) x=a; y=b; void Print(void)
17、cout x y endl; void main(void) A al,a2; al.m=20; al.n=10; al.Setxy(2.0, 5.0); al.PrintQ; 類類型的作用域:在函數(shù)定義之外定義的類, 其類名的作用域?yàn)槲募饔糜?;而在函?shù)體 內(nèi)定義的類,其類名的作用域?yàn)閴K作用域。 對(duì)象的作用域與前面介紹的變量作用域完全 相同,全局對(duì)象、局部對(duì)象、局部靜態(tài)對(duì)象 等。void main(void) A al,a2; 用對(duì)不能38 類的嵌套 在定義一個(gè)類時(shí),在其類體中又包含了一個(gè)類 的完整定義,稱為類的嵌套。 類是允許嵌套定義的。40 class A class B intij;
18、public : void Setij(int m, int n) i=m; j=n; ; float public: B big void Setxy( float a, float b ) x=a; y=b; void Print(void) cout x W y endl; ; 類的對(duì)象如何引用私有數(shù)據(jù)成員 class Test int x, y; public: void Setxy(int a, int b)x=a; y=b; void Printxy(void) cout,x=, x,t,My=M y endl; ; void main(void) Test pl,p2; pl.S
19、etxy(3,5)產(chǎn) pl.Printxy(); 在類A的定義中,并不嵌套類的對(duì)象 39 通過公有I 調(diào)用公 2、利用指針訪問私有數(shù)據(jù)成員 class Test int x,y public: void Setxy(int a9 int b) x=a; y=b; void Getxy(int *px, int *py) *px=x;*py=y;/提取x值 void Printxy(void)coutttx=n xtttMv=n y endl; ; void main(void) Test pl,p2; pl.Setxy(3,5); int a,b; pl.Getxy(&b);將 a=x
20、, b=y cout aftf b endl; 輸出:3 3 3、利用函數(shù)訪問私有數(shù)據(jù)成員 class Test public: void Setxy(int a9 int b) x=a; y=b; int Getx(void) return x; 返回x值 int Gety(void) return y;返回y值 void Printxy(void)coutMx=tt xfttffy=ft y endl; ; void main(void) Test pl,p2; pl.Setxy(3,5); int a9b; a=pl.Getx(); b=pl.Gety(); 將 a=x, b=y cou
21、t aftf b endl; 42函數(shù)值就是私有 4、利用引用訪問私有數(shù)據(jù)成員 class Test int x,y; public: void Setxy(int int b) x=a; y=b; void Getxy(int &px, int &py) px=x; py=y; 提取x,y值 void Printxy(void)couttfx=n x,tf,ty=t, y endl; void main(void) Test pl,p2; pl.Setxy(3,5); int a,b; pl.Getxy(a b);將 a=x, b=y cout aftf b endl; void main(void) A al,a2; A *p; 定義類的指針 P=&al; 給指針賦值 p-Set(2.0, 3.0); 通過指針引用對(duì)象的成員函數(shù) p-Print(); cout p Sum() endl; ) 定義類的al 2.0 3?0 printxyO void Print(void) coutMx=M xtt,tfy=ff yendi; J ; 43 a2.Set(10.0, 20.0); a2.Print(); stuO.SetStudent ( “A ,90,90);/通過數(shù)組元素的引用賦 st
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 連鎖超市轉(zhuǎn)讓協(xié)議書
- 車位租賃合同協(xié)議書
- 順豐司機(jī)合同協(xié)議書
- 金融委托貸款協(xié)議書
- 造價(jià)咨詢股東協(xié)議書
- Brand KPIs for second-hand apparel online shops IN LOVE AGAIN in Germany-外文版培訓(xùn)課件(2025.2)
- 長(zhǎng)期電力交易協(xié)議書
- 餐具貨物配送協(xié)議書
- 閑置資金托管協(xié)議書
- 餐具專版定制協(xié)議書
- 《比亞迪品牌歷史課件》課件
- 小學(xué)心理健康家長(zhǎng)會(huì)課件
- 2025年4月自考00160審計(jì)學(xué)答案含評(píng)分參考
- 購(gòu)買木地板合同協(xié)議
- 嚴(yán)重開放性肢體創(chuàng)傷早期救治專家共識(shí)解讀
- 2025年公共安全管理考試試題及答案
- 速賣通開店考試最權(quán)威答案
- 輸液導(dǎo)管相關(guān)靜脈血栓形成中國(guó)專家共識(shí) 課件
- 國(guó)企崗位筆試題目及答案
- 2024年泉州實(shí)驗(yàn)中學(xué)初一新生入學(xué)考試數(shù)學(xué)試卷
- 航模課程-飛翔的夢(mèng)想
評(píng)論
0/150
提交評(píng)論