![Object-OrientedProgramminginC++第二章類和對(duì)象_第1頁](http://file4.renrendoc.com/view/4d95ea435742cf3d5304a876941ab0fc/4d95ea435742cf3d5304a876941ab0fc1.gif)
![Object-OrientedProgramminginC++第二章類和對(duì)象_第2頁](http://file4.renrendoc.com/view/4d95ea435742cf3d5304a876941ab0fc/4d95ea435742cf3d5304a876941ab0fc2.gif)
![Object-OrientedProgramminginC++第二章類和對(duì)象_第3頁](http://file4.renrendoc.com/view/4d95ea435742cf3d5304a876941ab0fc/4d95ea435742cf3d5304a876941ab0fc3.gif)
![Object-OrientedProgramminginC++第二章類和對(duì)象_第4頁](http://file4.renrendoc.com/view/4d95ea435742cf3d5304a876941ab0fc/4d95ea435742cf3d5304a876941ab0fc4.gif)
![Object-OrientedProgramminginC++第二章類和對(duì)象_第5頁](http://file4.renrendoc.com/view/4d95ea435742cf3d5304a876941ab0fc/4d95ea435742cf3d5304a876941ab0fc5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Object-OrientedProgramming in C+第二章 類和對(duì)象中國科大學(xué)繼續(xù)教育學(xué)院 李藝第一章 C+的初步知識(shí)第二章 類和對(duì)象第三章 再論類和對(duì)象第四章 運(yùn)算符重載第五章 繼承與派生第六章 多態(tài)性與虛函數(shù)第七章 輸入輸出流第八章 C+工具2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述2.2 類的聲明和對(duì)象的定義2.3 類的成員函數(shù)2.4 對(duì)象成員的引用2.5 類和對(duì)象的舉例2.6 類的封裝和信息的隱藏2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述什么是面向?qū)ο蟮某绦蛟O(shè)計(jì)?面向?qū)ο蟮某绦蛟O(shè)計(jì)(Object-Oriented Programming )和傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)的思路完全不同。面向?qū)ο蟮某绦蛟O(shè)
2、計(jì)和人們?nèi)粘I罱鉀Q問題的思路是相似的。比如,我們生產(chǎn)汽車時(shí),不是順序制造發(fā)動(dòng)機(jī),在設(shè)計(jì)制造底盤、車身、輪子。而是分別設(shè)計(jì)制造發(fā)動(dòng)機(jī)、底盤、車身和輪子,最后組裝在一起。組裝時(shí),各部件之間有聯(lián)系,以便協(xié)調(diào)工作。例如,司機(jī)踩油門,就能調(diào)節(jié)油路,控制發(fā)動(dòng)機(jī)的轉(zhuǎn)速,就能驅(qū)動(dòng)車輪。2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述程序設(shè)計(jì)者的任務(wù)有兩個(gè):一是設(shè)計(jì)所需要的類和對(duì)象,即確定那些數(shù)據(jù)和操作封裝在一起;二是考慮怎樣向有關(guān)對(duì)象發(fā)送消息,以啟動(dòng)相關(guān)對(duì)象的操作。編程者如同一個(gè)總調(diào)度,不斷地向各個(gè)對(duì)象發(fā)出命令,讓這些對(duì)象活動(dòng)起來,完成指定的工作。這就是面向?qū)ο蟮某绦蛟O(shè)計(jì)的基本思路。2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述什么是對(duì)
3、象(object)?一個(gè)對(duì)象由一組“屬性”和一組“行為”構(gòu)成。并根據(jù)外界給它的消息進(jìn)行相應(yīng)的操作。系統(tǒng)中多個(gè)對(duì)象通過一定的渠道相互聯(lián)系。任何事物都可以看成一個(gè)對(duì)象??梢允亲匀晃矬w,也可以是邏輯結(jié)構(gòu)。我們以一個(gè)班級(jí)為例。一個(gè)班級(jí)作為對(duì)象,有兩個(gè)要素:一是班級(jí)的靜態(tài)特征,如班級(jí)所屬的專業(yè),學(xué)生人數(shù)、班主任姓名等,這種靜態(tài)特征稱為“屬性”;另一個(gè)是班級(jí)的動(dòng)態(tài)特征,如上課,體育比賽,開會(huì)等,稱為“行為”。外界向班級(jí)發(fā)一個(gè)信息(如上課鈴聲,廣播通知),我們稱之為“消息”,班級(jí)就會(huì)發(fā)生一個(gè)操作(要么上課,要么開會(huì))2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述什么是C+對(duì)象?C+中,每個(gè)對(duì)象都由若干數(shù)據(jù)和若干函數(shù)組成。
4、數(shù)據(jù)就是對(duì)象的“屬性”,函數(shù)就是用來對(duì)數(shù)據(jù)進(jìn)行的“操作”,以便實(shí)現(xiàn)某種功能。這種操作就是對(duì)象的“行為”,也叫“方法”。我們點(diǎn)擊一下鼠標(biāo),按動(dòng)鍵盤的一個(gè)按鈕,就是給某個(gè)對(duì)象一個(gè)消息,系統(tǒng)會(huì)調(diào)用該對(duì)象中的函數(shù)進(jìn)行操作。比如長方形對(duì)象,其長和寬就是它的屬性,調(diào)用該對(duì)象的一些函數(shù),即向該對(duì)象傳送一些消息,可以用來對(duì)其長、寬值進(jìn)行加工計(jì)算,以實(shí)現(xiàn)求出面積、周長等功能。2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述什么是對(duì)象封裝(encapsulation )?就是把對(duì)象的不想讓外界知道的屬性和功能屏蔽起來,讓外界看不見。封裝有兩個(gè)含義,一是將有關(guān)的數(shù)據(jù)和操作函數(shù)封裝成一個(gè)基本單位,即對(duì)象內(nèi)。各對(duì)象之間相互獨(dú)立,互不干
5、擾;二是將對(duì)象中的部分屬性或功能對(duì)外隱蔽,只留少數(shù)接口向外公布,以接收外界信息。對(duì)象封裝的好處在于,降低了人們操作對(duì)象的復(fù)雜程度。使用對(duì)象的人,不必知道對(duì)象內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),只需要了解外部功能就可以自如地操作該對(duì)象。對(duì)象的行為由類的內(nèi)部數(shù)據(jù)結(jié)構(gòu)和相關(guān)的操作確定;外部行為通過操作接口實(shí)現(xiàn)。人們關(guān)心的就是操作接口所能提供的服務(wù)。2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述什么是抽象(abstraction)?將具有相同特性的事物歸納、集中成一個(gè)統(tǒng)一類型,稱為抽象。比如,把張三,李四,王五歸納為一類,我們稱之為“人”。抽象的作用,是表示同類事物的本質(zhì)。如果你會(huì)操作自己家的電視機(jī),看到別人家里的電視機(jī)即使牌子不同,
6、你也肯定會(huì)操作,因?yàn)樗须娨暀C(jī)具有共同的特性。C和C+中,數(shù)據(jù)類型就是對(duì)一批具體數(shù)據(jù)的抽象,整形數(shù)據(jù)就是所有整數(shù)的抽象?!邦悺笔恰皩?duì)象”的抽象,“對(duì)象”則是類的“特例”,或“具體表現(xiàn)形式”。2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述什么是繼承( inherit )?生產(chǎn)汽車,一般不會(huì)從頭開始設(shè)計(jì),而是選擇已有的某一型號(hào)汽車為藍(lán)本,增加、修改一些功能就行了。軟件開發(fā)也是這樣,我們已經(jīng)有了一個(gè)名為“A”的類,還想建立一個(gè)名為“B”的類,而后者內(nèi)容只是在前者的基礎(chǔ)上增加了少量?jī)?nèi)容。我們顯然不必重新設(shè)計(jì)一個(gè)新類B,只需要把A類拿過來,在此基礎(chǔ)上添加新內(nèi)容就可以了。這就是面向?qū)ο蟪绦蛟O(shè)計(jì)的繼承機(jī)制。C+提供繼承機(jī)
7、制,大大節(jié)省了編程工作量,這就是所謂“軟件重用( software reusability )”的思想。對(duì)于大型軟件的開發(fā)具有重要意義。2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述什么是多態(tài)性( polymorphism )?如果有幾個(gè)相似而不同的對(duì)象,人們往往要求在向它們發(fā)出同一個(gè)消息時(shí),各自作出不同的操作,這種情況就是“多態(tài)現(xiàn)象”。比如,高二1,2,3班,聽到上課鈴后,作出的動(dòng)作是各自走進(jìn)自己的教室上課,而不會(huì)走錯(cuò)教室。C+中,所謂多態(tài)性是指,由繼承而產(chǎn)生的相關(guān)的不同的類,其對(duì)象對(duì)同一消息會(huì)作出不同的響應(yīng)。顯然,多態(tài)性能增加程序的靈活性,它是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特征。2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述
8、類與對(duì)象的作用C+全面支持傳統(tǒng)的面向過程的程序設(shè)計(jì)(即結(jié)構(gòu)化編程),也支持基于對(duì)象和面向?qū)ο蟮某绦蛟O(shè)計(jì)。所謂基于對(duì)象,是指程序是以類和對(duì)象為基礎(chǔ),程序的操作是圍繞對(duì)象進(jìn)行的。所謂面向?qū)ο螅侵?,在基于?duì)象的基礎(chǔ)上,利用了繼承機(jī)制和多態(tài)性。面向?qū)ο蟮某绦蛟O(shè)計(jì)特點(diǎn):類具有對(duì)數(shù)據(jù)的抽象性、封裝性、繼承性、多態(tài)性。2.2 類的聲明和對(duì)象的定義類和對(duì)象的關(guān)系每一個(gè)實(shí)體都可以作為對(duì)象,一些對(duì)象具有相同的結(jié)構(gòu)和特性。如高一1班,2班,3班。他們是不同的對(duì)象,但具有完全相同的結(jié)構(gòu)的特性。每個(gè)對(duì)象都屬于一個(gè)特定的類型。C+中,對(duì)象的類型稱為類( class )。類代表了某一批對(duì)象的共同特性。前面已經(jīng)談到,類是對(duì)
9、象的抽象,而對(duì)象是類的具體實(shí)例( instance )。就象結(jié)構(gòu)體類型和結(jié)構(gòu)體變量一樣。C+中,我們先聲明一個(gè)類的類型,然后再定義該類的若干對(duì)象。對(duì)象就是類這種類型的一個(gè)變量。類是抽象的,不占內(nèi)存,而對(duì)象是具體的,要占用內(nèi)存空間。2.2 類的聲明和對(duì)象的定義類的聲明類的聲明方法和結(jié)構(gòu)體的聲明方法一樣,只是將關(guān)鍵字struct 換成class:class 類名 private:私有數(shù)據(jù)成員和私有成員函數(shù); public:公共數(shù)據(jù)成員和公共成員函數(shù);成員訪問限定符( member access specifier )成員訪問限定符( member access specifier )別忘了必須用分
10、號(hào)結(jié)束!2.2 類的聲明和對(duì)象的定義類的聲明示例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 類的聲明和對(duì)象的定義對(duì)象的定義 聲明了類以后,就可以定義該類的對(duì)象了。其格式為: class 類名 對(duì)象名1,對(duì)象名2, / 方括號(hào)表示可選項(xiàng)對(duì)象定義示例 如前例中,聲明了一個(gè)名為 rectangle 的類,我們可以定義該類的若干對(duì)象:rectangle r1, r2, r3;對(duì)象定義說明 類的聲明和對(duì)象的定義可以想結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義一樣,合在一起完成。請(qǐng)同學(xué)們自己閱讀教材48頁的內(nèi)容。2.3 類的成員函數(shù)成員函數(shù)的性質(zhì)類的成員函數(shù)也叫
12、類函數(shù),用法和一般函數(shù)基本上一樣。區(qū)別在于它只是屬于一個(gè)類的成員而出現(xiàn)在類中。它可以被指定為類的私有成員( private )、公有成員( public )或保護(hù)成員( protected )。使用類函數(shù)時(shí),要注意它的使用權(quán)限,如果是私有成員,只能被本類的其他成員函數(shù)調(diào)用,不能被類外調(diào)用。成員函數(shù)可以調(diào)用本類所有數(shù)據(jù)成員和成員函數(shù),也可以引用在本作用域中的有效數(shù)據(jù)。通常,我們把類的數(shù)據(jù)成員定義成私有成員,對(duì)外屏蔽,而把成員函數(shù)定義成公有成員,他可以調(diào)用私有成員和其它成員。一個(gè)類若沒有成員函數(shù),就退化成C語言的結(jié)構(gòu)體,而失去意義。2.3 類的成員函數(shù)在類外定義成員函數(shù)成員函數(shù)一般在類體中定義,如
13、前面所講。也可以在類外定義,但要指明是屬于哪個(gè)類的成員函數(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; 這種類定義包括兩個(gè)部分:1、聲明部分(“做什么”): 數(shù)據(jù)成員(名稱、類型) 成員函數(shù)(方法)2、實(shí)現(xiàn)部分(“怎么做”): 成員函數(shù)的定義和實(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ù)的存儲(chǔ)方式同一類定義了多個(gè)對(duì)象時(shí),每個(gè)對(duì)象的數(shù)據(jù)成員各自占據(jù)獨(dú)立的空間,而共享一個(gè)共用的函數(shù)代碼段,不占用對(duì)象的存儲(chǔ)空間。那么不同對(duì)象使用的是同一個(gè)函數(shù)代碼段,如何區(qū)分不同對(duì)象呢?C+為此專門設(shè)立了一個(gè)名為 this 的指針,用來指向不同的對(duì)象。當(dāng)調(diào)用對(duì)象r1,成員函數(shù)訪問的就是r1的成員。數(shù)據(jù)1對(duì)象r1數(shù)據(jù)2對(duì)象r2數(shù)據(jù)
16、10對(duì)象r10共用函數(shù)代碼2.4 對(duì)象成員的引用用對(duì)象名和成員運(yùn)算符( . )訪問對(duì)象成員舉例:用這種方式萬分的成員,必須定義成公用成員!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 對(duì)象成員的引用用對(duì)象的引用訪問對(duì)象成員舉例: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í) 請(qǐng)同學(xué)們自己閱讀教材55頁2.5節(jié)的簡(jiǎn)單示例程序。然后編寫下列程序:輸入三個(gè)整數(shù),并輸出它們之中的最大值。2.6 類的封裝和信息隱蔽公用接口和私有實(shí)現(xiàn)的分離我們已經(jīng)學(xué)到,C+通過類的封裝,將類的數(shù)據(jù)成員和成員函數(shù)集成到一個(gè)類中。而一般在類的聲明時(shí),往往把數(shù)據(jù)成員指定成私有的,使它們與外界隔離,即,不能在類外直接使用
19、私有成員,外界只能通過類的公有函數(shù),間接進(jìn)行對(duì)私有成員的操作。換句話說,外界與類的私有成員的唯一聯(lián)系渠道,就是該類的公有成員函數(shù)。所以,我們一般把成員函數(shù)指定成公有的( public )性質(zhì)(除非某些成員函數(shù)不想讓外界調(diào)用)。這就是所謂的“外部接口”與內(nèi)部實(shí)現(xiàn)的分離,以起到信息隱蔽的作用。而這是軟件工程最基本的原則。 定義一個(gè)類就是實(shí)現(xiàn)對(duì)創(chuàng)建一個(gè)對(duì)象的數(shù)據(jù)結(jié)構(gòu)的描述。 在類中,一些成員是保護(hù)的,被有效地屏蔽,以防外界的干擾和誤操作。 另一些成員是公共的,作為接口提供外界使用。 右圖是對(duì)它們采用的圖示方法說明類的組成結(jié)構(gòu)。以Point 類為例。xoffsetyoffsetsetangleradi
20、usxy封裝體內(nèi)部數(shù)據(jù)成員Point 類訪問接口2.6 類的封裝和信息隱蔽類聲明和成員函數(shù)定義的分離當(dāng)一個(gè)類被多個(gè)程序使用時(shí),一般將類的聲明(包括成員函數(shù)的聲明)放在指定的頭文件中,用戶在編程時(shí),將該頭文件包含近來就可以了。而不必在每個(gè)使用該類的程序中重復(fù)書寫該類的聲明。我們?nèi)缓罂梢灾苯釉诔绦蛑兄苯佣x該類的對(duì)象,直接調(diào)用該類的公有成員函數(shù)。為了實(shí)現(xiàn)信息隱蔽,對(duì)類的成員函數(shù)的定義一般不放在頭文件中,而放在另一個(gè)文件中。然后按照對(duì)多文件程序的編譯和運(yùn)行方法對(duì)程序進(jìn)行編譯和連接。請(qǐng)看下面示例。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等.壓縮文件請(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人轉(zhuǎn)介紹合同范本
- 公司過戶合同范本
- 北京家政服務(wù)合同范本
- 代墊付工資合同范本
- 鄉(xiāng)鎮(zhèn)防汛物資購銷合同范本
- 2023-2028年中國等離子手術(shù)刀行業(yè)市場(chǎng)調(diào)查研究及發(fā)展戰(zhàn)略規(guī)劃報(bào)告
- 2025年度住宅小區(qū)工程質(zhì)量監(jiān)控服務(wù)合同
- 加工合同范本版
- 2025年中國船舶裝載機(jī)行業(yè)發(fā)展趨勢(shì)及投資前景預(yù)測(cè)報(bào)告
- 社會(huì)政策概論課件
- 工程量清單及招標(biāo)控制價(jià)編制服務(wù)采購實(shí)施方案(技術(shù)標(biāo))
- 全國住戶收支調(diào)查業(yè)務(wù)知識(shí)考試復(fù)習(xí)題庫(含答案)
- 復(fù)方氨基酸注射液的匯總
- 2023年上海市秋考語文真題試卷含答案(整理版)
- 2023年心理咨詢師之心理咨詢師基礎(chǔ)知識(shí)考試題庫附完整答案【有一套】
- 一級(jí)建造師繼續(xù)教育最全題庫及答案(新)
- 直線加速器專項(xiàng)施工方案
- 聯(lián)苯二氯芐生產(chǎn)工藝及產(chǎn)排污分析
- 儲(chǔ)能設(shè)備項(xiàng)目采購供應(yīng)質(zhì)量管理方案
- 美國房地產(chǎn)市場(chǎng)特征、框架與周期演變
評(píng)論
0/150
提交評(píng)論