![Object-OrientedProgramminginC++第二章類和對象_第1頁](http://file4.renrendoc.com/view/4d95ea435742cf3d5304a876941ab0fc/4d95ea435742cf3d5304a876941ab0fc1.gif)
![Object-OrientedProgramminginC++第二章類和對象_第2頁](http://file4.renrendoc.com/view/4d95ea435742cf3d5304a876941ab0fc/4d95ea435742cf3d5304a876941ab0fc2.gif)
![Object-OrientedProgramminginC++第二章類和對象_第3頁](http://file4.renrendoc.com/view/4d95ea435742cf3d5304a876941ab0fc/4d95ea435742cf3d5304a876941ab0fc3.gif)
![Object-OrientedProgramminginC++第二章類和對象_第4頁](http://file4.renrendoc.com/view/4d95ea435742cf3d5304a876941ab0fc/4d95ea435742cf3d5304a876941ab0fc4.gif)
![Object-OrientedProgramminginC++第二章類和對象_第5頁](http://file4.renrendoc.com/view/4d95ea435742cf3d5304a876941ab0fc/4d95ea435742cf3d5304a876941ab0fc5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Object-OrientedProgramming in C+第二章 類和對象中國科大學(xué)繼續(xù)教育學(xué)院 李藝第一章 C+的初步知識第二章 類和對象第三章 再論類和對象第四章 運(yùn)算符重載第五章 繼承與派生第六章 多態(tài)性與虛函數(shù)第七章 輸入輸出流第八章 C+工具2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述2.2 類的聲明和對象的定義2.3 類的成員函數(shù)2.4 對象成員的引用2.5 類和對象的舉例2.6 類的封裝和信息的隱藏2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述什么是面向?qū)ο蟮某绦蛟O(shè)計?面向?qū)ο蟮某绦蛟O(shè)計(Object-Oriented Programming )和傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計的思路完全不同。面向?qū)ο蟮某绦蛟O(shè)
2、計和人們?nèi)粘I罱鉀Q問題的思路是相似的。比如,我們生產(chǎn)汽車時,不是順序制造發(fā)動機(jī),在設(shè)計制造底盤、車身、輪子。而是分別設(shè)計制造發(fā)動機(jī)、底盤、車身和輪子,最后組裝在一起。組裝時,各部件之間有聯(lián)系,以便協(xié)調(diào)工作。例如,司機(jī)踩油門,就能調(diào)節(jié)油路,控制發(fā)動機(jī)的轉(zhuǎn)速,就能驅(qū)動車輪。2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述程序設(shè)計者的任務(wù)有兩個:一是設(shè)計所需要的類和對象,即確定那些數(shù)據(jù)和操作封裝在一起;二是考慮怎樣向有關(guān)對象發(fā)送消息,以啟動相關(guān)對象的操作。編程者如同一個總調(diào)度,不斷地向各個對象發(fā)出命令,讓這些對象活動起來,完成指定的工作。這就是面向?qū)ο蟮某绦蛟O(shè)計的基本思路。2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述什么是對
3、象(object)?一個對象由一組“屬性”和一組“行為”構(gòu)成。并根據(jù)外界給它的消息進(jìn)行相應(yīng)的操作。系統(tǒng)中多個對象通過一定的渠道相互聯(lián)系。任何事物都可以看成一個對象??梢允亲匀晃矬w,也可以是邏輯結(jié)構(gòu)。我們以一個班級為例。一個班級作為對象,有兩個要素:一是班級的靜態(tài)特征,如班級所屬的專業(yè),學(xué)生人數(shù)、班主任姓名等,這種靜態(tài)特征稱為“屬性”;另一個是班級的動態(tài)特征,如上課,體育比賽,開會等,稱為“行為”。外界向班級發(fā)一個信息(如上課鈴聲,廣播通知),我們稱之為“消息”,班級就會發(fā)生一個操作(要么上課,要么開會)2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述什么是C+對象?C+中,每個對象都由若干數(shù)據(jù)和若干函數(shù)組成。
4、數(shù)據(jù)就是對象的“屬性”,函數(shù)就是用來對數(shù)據(jù)進(jìn)行的“操作”,以便實現(xiàn)某種功能。這種操作就是對象的“行為”,也叫“方法”。我們點擊一下鼠標(biāo),按動鍵盤的一個按鈕,就是給某個對象一個消息,系統(tǒng)會調(diào)用該對象中的函數(shù)進(jìn)行操作。比如長方形對象,其長和寬就是它的屬性,調(diào)用該對象的一些函數(shù),即向該對象傳送一些消息,可以用來對其長、寬值進(jìn)行加工計算,以實現(xiàn)求出面積、周長等功能。2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述什么是對象封裝(encapsulation )?就是把對象的不想讓外界知道的屬性和功能屏蔽起來,讓外界看不見。封裝有兩個含義,一是將有關(guān)的數(shù)據(jù)和操作函數(shù)封裝成一個基本單位,即對象內(nèi)。各對象之間相互獨立,互不干
5、擾;二是將對象中的部分屬性或功能對外隱蔽,只留少數(shù)接口向外公布,以接收外界信息。對象封裝的好處在于,降低了人們操作對象的復(fù)雜程度。使用對象的人,不必知道對象內(nèi)部的實現(xiàn)細(xì)節(jié),只需要了解外部功能就可以自如地操作該對象。對象的行為由類的內(nèi)部數(shù)據(jù)結(jié)構(gòu)和相關(guān)的操作確定;外部行為通過操作接口實現(xiàn)。人們關(guān)心的就是操作接口所能提供的服務(wù)。2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述什么是抽象(abstraction)?將具有相同特性的事物歸納、集中成一個統(tǒng)一類型,稱為抽象。比如,把張三,李四,王五歸納為一類,我們稱之為“人”。抽象的作用,是表示同類事物的本質(zhì)。如果你會操作自己家的電視機(jī),看到別人家里的電視機(jī)即使牌子不同,
6、你也肯定會操作,因為所有電視機(jī)具有共同的特性。C和C+中,數(shù)據(jù)類型就是對一批具體數(shù)據(jù)的抽象,整形數(shù)據(jù)就是所有整數(shù)的抽象。“類”是“對象”的抽象,“對象”則是類的“特例”,或“具體表現(xiàn)形式”。2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述什么是繼承( inherit )?生產(chǎn)汽車,一般不會從頭開始設(shè)計,而是選擇已有的某一型號汽車為藍(lán)本,增加、修改一些功能就行了。軟件開發(fā)也是這樣,我們已經(jīng)有了一個名為“A”的類,還想建立一個名為“B”的類,而后者內(nèi)容只是在前者的基礎(chǔ)上增加了少量內(nèi)容。我們顯然不必重新設(shè)計一個新類B,只需要把A類拿過來,在此基礎(chǔ)上添加新內(nèi)容就可以了。這就是面向?qū)ο蟪绦蛟O(shè)計的繼承機(jī)制。C+提供繼承機(jī)
7、制,大大節(jié)省了編程工作量,這就是所謂“軟件重用( software reusability )”的思想。對于大型軟件的開發(fā)具有重要意義。2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述什么是多態(tài)性( polymorphism )?如果有幾個相似而不同的對象,人們往往要求在向它們發(fā)出同一個消息時,各自作出不同的操作,這種情況就是“多態(tài)現(xiàn)象”。比如,高二1,2,3班,聽到上課鈴后,作出的動作是各自走進(jìn)自己的教室上課,而不會走錯教室。C+中,所謂多態(tài)性是指,由繼承而產(chǎn)生的相關(guān)的不同的類,其對象對同一消息會作出不同的響應(yīng)。顯然,多態(tài)性能增加程序的靈活性,它是面向?qū)ο蟪绦蛟O(shè)計的重要特征。2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述
8、類與對象的作用C+全面支持傳統(tǒng)的面向過程的程序設(shè)計(即結(jié)構(gòu)化編程),也支持基于對象和面向?qū)ο蟮某绦蛟O(shè)計。所謂基于對象,是指程序是以類和對象為基礎(chǔ),程序的操作是圍繞對象進(jìn)行的。所謂面向?qū)ο?,是指,在基于對象的基礎(chǔ)上,利用了繼承機(jī)制和多態(tài)性。面向?qū)ο蟮某绦蛟O(shè)計特點:類具有對數(shù)據(jù)的抽象性、封裝性、繼承性、多態(tài)性。2.2 類的聲明和對象的定義類和對象的關(guān)系每一個實體都可以作為對象,一些對象具有相同的結(jié)構(gòu)和特性。如高一1班,2班,3班。他們是不同的對象,但具有完全相同的結(jié)構(gòu)的特性。每個對象都屬于一個特定的類型。C+中,對象的類型稱為類( class )。類代表了某一批對象的共同特性。前面已經(jīng)談到,類是對
9、象的抽象,而對象是類的具體實例( instance )。就象結(jié)構(gòu)體類型和結(jié)構(gòu)體變量一樣。C+中,我們先聲明一個類的類型,然后再定義該類的若干對象。對象就是類這種類型的一個變量。類是抽象的,不占內(nèi)存,而對象是具體的,要占用內(nèi)存空間。2.2 類的聲明和對象的定義類的聲明類的聲明方法和結(jié)構(gòu)體的聲明方法一樣,只是將關(guān)鍵字struct 換成class:class 類名 private:私有數(shù)據(jù)成員和私有成員函數(shù); public:公共數(shù)據(jù)成員和公共成員函數(shù);成員訪問限定符( member access specifier )成員訪問限定符( member access specifier )別忘了必須用分
10、號結(jié)束!2.2 類的聲明和對象的定義類的聲明示例class rectangle private: int length, width, area, perimeter ; public: void PutArea ( ) area = length * width; void PutPerimeter ( ) perimeter = (length + width ) * 2; void display ( ) cout “l(fā)ength = “ length endl; cout “width = “ width endl; cout “area = “ area endl; cout “pe
11、rimeter = “ perimeter endl; ;在類的外面不能訪問私有成員,只能通過公有成員函數(shù)間接訪問在類的外面可以訪問公有成員2.2 類的聲明和對象的定義對象的定義 聲明了類以后,就可以定義該類的對象了。其格式為: class 類名 對象名1,對象名2, / 方括號表示可選項對象定義示例 如前例中,聲明了一個名為 rectangle 的類,我們可以定義該類的若干對象:rectangle r1, r2, r3;對象定義說明 類的聲明和對象的定義可以想結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義一樣,合在一起完成。請同學(xué)們自己閱讀教材48頁的內(nèi)容。2.3 類的成員函數(shù)成員函數(shù)的性質(zhì)類的成員函數(shù)也叫
12、類函數(shù),用法和一般函數(shù)基本上一樣。區(qū)別在于它只是屬于一個類的成員而出現(xiàn)在類中。它可以被指定為類的私有成員( private )、公有成員( public )或保護(hù)成員( protected )。使用類函數(shù)時,要注意它的使用權(quán)限,如果是私有成員,只能被本類的其他成員函數(shù)調(diào)用,不能被類外調(diào)用。成員函數(shù)可以調(diào)用本類所有數(shù)據(jù)成員和成員函數(shù),也可以引用在本作用域中的有效數(shù)據(jù)。通常,我們把類的數(shù)據(jù)成員定義成私有成員,對外屏蔽,而把成員函數(shù)定義成公有成員,他可以調(diào)用私有成員和其它成員。一個類若沒有成員函數(shù),就退化成C語言的結(jié)構(gòu)體,而失去意義。2.3 類的成員函數(shù)在類外定義成員函數(shù)成員函數(shù)一般在類體中定義,如
13、前面所講。也可以在類外定義,但要指明是屬于哪個類的成員函數(shù),用“類名:函數(shù)名”來指定。例如:class rectangle private: int length, width,; int area, perimeter ; public: void PutArea ( ); void PutPerimeter ( ); void display ( );void rectangle: PutArea ( ) area = length * width;void rectangle: PutPerimeter ( ) perimeter = (length + width ) * 2; voi
14、d rectangle: display ( ) cout “l(fā)ength = “ length endl; cout “width = “ width endl; cout “area = “ area endl; cout “perimeter = “ perimeter ; rectangle r1, r2, r3; 這種類定義包括兩個部分:1、聲明部分(“做什么”): 數(shù)據(jù)成員(名稱、類型) 成員函數(shù)(方法)2、實現(xiàn)部分(“怎么做”): 成員函數(shù)的定義和實現(xiàn)2.3 類的成員函數(shù)其中,“:”成為域限定符。如果在域限定符前沒有類名,或函數(shù)名前既沒有類名,又沒有域限定符::display (
15、 ) 或 display ( )則表示該函數(shù)不屬于任何類,它不是成員函數(shù),而是全局函數(shù),即普通函數(shù)。inline 成員函數(shù)類的成員函數(shù)也可以指定為內(nèi)聯(lián)函數(shù),只要是函數(shù)代碼較少,有頻繁使用。我們只要在成員函數(shù)的類型簽名加上inline 關(guān)鍵字就可以。2.3 類的成員函數(shù)成員函數(shù)的存儲方式同一類定義了多個對象時,每個對象的數(shù)據(jù)成員各自占據(jù)獨立的空間,而共享一個共用的函數(shù)代碼段,不占用對象的存儲空間。那么不同對象使用的是同一個函數(shù)代碼段,如何區(qū)分不同對象呢?C+為此專門設(shè)立了一個名為 this 的指針,用來指向不同的對象。當(dāng)調(diào)用對象r1,成員函數(shù)訪問的就是r1的成員。數(shù)據(jù)1對象r1數(shù)據(jù)2對象r2數(shù)據(jù)
16、10對象r10共用函數(shù)代碼2.4 對象成員的引用用對象名和成員運(yùn)算符( . )訪問對象成員舉例:用這種方式萬分的成員,必須定義成公用成員!class rectangle public: int length, width; / 公共數(shù)據(jù)成員 void display ( ); / 公共成員函數(shù);void rectangle: display ( )cout “area =“ length* width ednl; cout“perimeter =“ lengthclass rectangle public: int length, width; / 公共數(shù)據(jù)成員 void display (
17、); / 公共成員函數(shù) ;void rectangle: display ( )cout “area =“ length* width ednl; cout“perimeter =“ lenght = 5; p-width = 4; p-display ( ); 2.4 對象成員的引用用對象的引用訪問對象成員舉例:class rectangle public: int length, width; / 公共數(shù)據(jù)成員 void display ( ); / 公共成員函數(shù);void rectangle: display ( )cout “area =“ length* width ednl; co
18、ut“perimeter =“ ( length+ width)*2; void main ( ) rectangle r2; rectangle &r3 = r2; /r3引用r2 r3.lenght = 5; r3.width = 4; r3.display ( ); 編程練習(xí) 請同學(xué)們自己閱讀教材55頁2.5節(jié)的簡單示例程序。然后編寫下列程序:輸入三個整數(shù),并輸出它們之中的最大值。2.6 類的封裝和信息隱蔽公用接口和私有實現(xiàn)的分離我們已經(jīng)學(xué)到,C+通過類的封裝,將類的數(shù)據(jù)成員和成員函數(shù)集成到一個類中。而一般在類的聲明時,往往把數(shù)據(jù)成員指定成私有的,使它們與外界隔離,即,不能在類外直接使用
19、私有成員,外界只能通過類的公有函數(shù),間接進(jìn)行對私有成員的操作。換句話說,外界與類的私有成員的唯一聯(lián)系渠道,就是該類的公有成員函數(shù)。所以,我們一般把成員函數(shù)指定成公有的( public )性質(zhì)(除非某些成員函數(shù)不想讓外界調(diào)用)。這就是所謂的“外部接口”與內(nèi)部實現(xiàn)的分離,以起到信息隱蔽的作用。而這是軟件工程最基本的原則。 定義一個類就是實現(xiàn)對創(chuàng)建一個對象的數(shù)據(jù)結(jié)構(gòu)的描述。 在類中,一些成員是保護(hù)的,被有效地屏蔽,以防外界的干擾和誤操作。 另一些成員是公共的,作為接口提供外界使用。 右圖是對它們采用的圖示方法說明類的組成結(jié)構(gòu)。以Point 類為例。xoffsetyoffsetsetangleradi
20、usxy封裝體內(nèi)部數(shù)據(jù)成員Point 類訪問接口2.6 類的封裝和信息隱蔽類聲明和成員函數(shù)定義的分離當(dāng)一個類被多個程序使用時,一般將類的聲明(包括成員函數(shù)的聲明)放在指定的頭文件中,用戶在編程時,將該頭文件包含近來就可以了。而不必在每個使用該類的程序中重復(fù)書寫該類的聲明。我們?nèi)缓罂梢灾苯釉诔绦蛑兄苯佣x該類的對象,直接調(diào)用該類的公有成員函數(shù)。為了實現(xiàn)信息隱蔽,對類的成員函數(shù)的定義一般不放在頭文件中,而放在另一個文件中。然后按照對多文件程序的編譯和運(yùn)行方法對程序進(jìn)行編譯和連接。請看下面示例。2.6 類的封裝和信息隱蔽/ rectangle.hclass rectangle private: int length, width; public: void Put ( ); void display ( ); ;/ rectangle.cpp#include #include “rectangle.h”void rectangle:Put ( ) leng
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電火鍋電蒸鍋智能化與互聯(lián)網(wǎng)+發(fā)展
- 8 土地的誓言 公開課一等獎創(chuàng)新教案
- 陜西青年職業(yè)學(xué)院《機(jī)器人基礎(chǔ)與制作》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶智能工程職業(yè)學(xué)院《信息安全等級保護(hù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 煙臺大學(xué)《非遺走進(jìn)現(xiàn)代生活》2023-2024學(xué)年第二學(xué)期期末試卷
- 福建商學(xué)院《藥廠設(shè)備》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024年02月安徽2024年安徽涇縣農(nóng)村商業(yè)銀行社會招考12人筆試歷年參考題庫附帶答案詳解
- 2025年運(yùn)維軟件合作協(xié)議書
- 護(hù)理三基專項測試題
- 2025年中國圓壓圓軟輥筒模切機(jī)市場調(diào)查研究報告
- 一級建造師繼續(xù)教育最全題庫及答案(新)
- 2022年高考湖南卷生物試題(含答案解析)
- GB/T 20909-2007鋼門窗
- GB/T 17854-1999埋弧焊用不銹鋼焊絲和焊劑
- GB/T 15593-2020輸血(液)器具用聚氯乙烯塑料
- 直線加速器專項施工方案
- 聯(lián)苯二氯芐生產(chǎn)工藝及產(chǎn)排污分析
- 儲能設(shè)備項目采購供應(yīng)質(zhì)量管理方案
- 2022年全國卷高考語文答題卡格式
- 復(fù)旦大學(xué)簡介 (課堂PPT)
- CKD馬達(dá)使用說明
評論
0/150
提交評論