2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Object-OrientedProgramming in C++第二章 類和對(duì)象,中國(guó)科大學(xué)繼續(xù)教育學(xué)院 李藝leeyi@ustc.edu.cn,第一章 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、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è)計(jì)和人們?nèi)粘I罱鉀Q問(wèn)題的思路是相似的。比如,我們生產(chǎn)汽車時(shí),不是順序制造發(fā)動(dòng)機(jī),在設(shè)計(jì)制造底盤(pán)、車身、輪子。而是分別設(shè)計(jì)制造發(fā)動(dòng)機(jī)、底盤(pán)、車身和輪子,最后組裝在一起。組裝時(shí),各部

3、件之間有聯(lián)系,以便協(xié)調(diào)工作。例如,司機(jī)踩油門(mén),就能調(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)起來(lái),完成指定的工作。這就是面向?qū)ο蟮某绦蛟O(shè)計(jì)的基本思路。,2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述,什么是對(duì)

4、象(object)?一個(gè)對(duì)象由一組“屬性”和一組“行為”構(gòu)成。并根據(jù)外界給它的消息進(jìn)行相應(yīng)的操作。系統(tǒng)中多個(gè)對(duì)象通過(guò)一定的渠道相互聯(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)特征,如上課,體育比賽,開(kāi)會(huì)等,稱為“行為”。外界向班級(jí)發(fā)一個(gè)信息(如上課

5、鈴聲,廣播通知),我們稱之為“消息”,班級(jí)就會(huì)發(fā)生一個(gè)操作(要么上課,要么開(kāi)會(huì)),2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述,什么是C++對(duì)象?C++中,每個(gè)對(duì)象都由若干數(shù)據(jù)和若干函數(shù)組成。數(shù)據(jù)就是對(duì)象的“屬性”,函數(shù)就是用來(lái)對(duì)數(shù)據(jù)進(jìn)行的“操作”,以便實(shí)現(xiàn)某種功能。這種操作就是對(duì)象的“行為”,也叫“方法”。我們點(diǎn)擊一下鼠標(biāo),按動(dòng)鍵盤(pán)的一個(gè)按鈕,就是給某個(gè)對(duì)象一個(gè)消息,系統(tǒng)回調(diào)用該對(duì)象中的函數(shù)進(jìn)行操作。比如長(zhǎng)方形對(duì)象,其長(zhǎng)和寬就是它的屬

6、性,調(diào)用該對(duì)象的一些函數(shù),即向該對(duì)象傳送一些消息,可以用來(lái)對(duì)其長(zhǎng)、寬值進(jìn)行加工計(jì)算,以實(shí)現(xiàn)求出面積、周長(zhǎng)等功能。,2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述,什么是對(duì)象封裝(encapsulation )?就是把對(duì)象的不鄉(xiāng)讓外界知道的屬性和功能屏蔽起來(lái),讓外界看不見(jiàn)。封裝有兩個(gè)含義,一是將有關(guān)的數(shù)據(jù)和操作函數(shù)封裝成一個(gè)基本單位,即對(duì)象內(nèi)。各對(duì)象之間相互獨(dú)立,互不干擾;二是將對(duì)象中的部分屬性或功能對(duì)外隱蔽,只留少數(shù)接口向外公布,以接收外界信息

7、。對(duì)象封裝的好處在于,降低了人們操作對(duì)象的復(fù)雜程度。使用對(duì)象的人,不必知道對(duì)象內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),只需要了解外部功能就可以自如地操作該對(duì)象。對(duì)象的行為由類的內(nèi)部數(shù)據(jù)結(jié)構(gòu)和相關(guān)的操作確定;外部行為通過(guò)操作接口實(shí)現(xiàn)。人們關(guān)心的就是操作接口所能提供的服務(wù)。,2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述,什么是抽象(abstraction)?將具有相同特性的事物歸納、集中成一個(gè)統(tǒng)一類型,稱為抽象。比如,把張三,李四,王五歸納為一類,我們稱之為

8、“人”。抽象的作用,是表示同類事物的本質(zhì)。如果你會(huì)操作自己家的電視機(jī),看到別人家里的電視機(jī)即使牌子不同,你也肯定會(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ì)從頭開(kāi)始設(shè)計(jì),而是選擇已有的某一

9、型號(hào)汽車為藍(lán)本,增加、修改一些功能就行了。軟件開(kāi)發(fā)也是這樣,我們已經(jīng)有了一個(gè)名為“A”的類,還想建立一個(gè)名為“B”的類,而后者內(nèi)容只是在前者的基礎(chǔ)上增加了少量?jī)?nèi)容。我們顯然不必重新設(shè)計(jì)一個(gè)新類B,只需要把A類拿過(guò)來(lái),在此基礎(chǔ)上添加新內(nèi)容就可以了。這就是面向?qū)ο蟪绦蛟O(shè)計(jì)的繼承機(jī)制。C++提供繼承機(jī)制,大大節(jié)省了編程工作量,這就是所謂“軟件重用( software reusability )”的思想。對(duì)于大型軟件的開(kāi)發(fā)具有重要意

10、義。,2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述,什么是多態(tài)性( polymorphism )?如果有幾個(gè)相似而不同的對(duì)象,人們往往要求在向它們發(fā)出同一個(gè)消息時(shí),各自作出不同的操作,這種情況就是“多態(tài)現(xiàn)象”。比如,高二1,2,3班,聽(tīng)到上課鈴后,作出的動(dòng)作是各自走進(jìn)自己的教室上課,而不會(huì)走錯(cuò)教室。C++中,所謂多態(tài)性是指,由繼承而產(chǎn)生的相關(guān)的不同的類,其對(duì)象對(duì)同一消息會(huì)作出不同的響應(yīng)。顯然,多態(tài)性能增加程序的靈活性,它是面

11、向?qū)ο蟪绦蛟O(shè)計(jì)的重要特征。,2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述,類與對(duì)象的作用C++全面支持傳統(tǒng)的面向過(guò)程的程序設(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ì)象的

12、關(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ì)象的抽象,而對(duì)象是類的具體實(shí)例( instance )。就象結(jié)構(gòu)體類型和結(jié)構(gòu)體變量一樣。C++中,我們先聲明一個(gè)類的類型,然后再定義該類的若干對(duì)象。對(duì)象就是類這種類型

13、的一個(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ù);};,成員訪問(wèn)限定符( member access specifier ),成員訪問(wèn)限定符( member acce

14、ss specifier ),別忘了必須用分號(hào)結(jié)束!,2.2 類的聲明和對(duì)象的定義,類的聲明示例class rectangle { private: int length, width, area, perimeter ; public: void PutArea ( ) { area = length * width;} void PutPerimeter ( ) { perimet

15、er = (length + width ) * 2; } void display ( ) { cout << “l(fā)ength = “<< length << endl; cout << “width = “<< width << endl; cout << “area = “ << area

16、<< endl; cout << “perimeter = “ << perimeter << endl; }};,在類的外面不能訪問(wèn)私有成員,只能通過(guò)公有成員函數(shù)間接訪問(wèn),在類的外面可以訪問(wèn)公有成員,2.2 類的聲明和對(duì)象的定義,對(duì)象的定義 聲明了類以后,就可以定義該類的對(duì)象了。其格式為: [class] 類名 對(duì)象名1,對(duì)象名2,… // 方

17、括號(hào)表示可選項(xiàng)對(duì)象定義示例 如前例中,聲明了一個(gè)名為 rectangle 的類,我們可以定義該類的若干對(duì)象:rectangle r1, r2, r3;對(duì)象定義說(shuō)明 類的聲明和對(duì)象的定義可以想結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義一樣,合在一起完成。請(qǐng)同學(xué)們自己閱讀教材48頁(yè)的內(nèi)容。,2.3 類的成員函數(shù),成員函數(shù)的性質(zhì)類的成員函數(shù)也叫類函數(shù),用法和一般函數(shù)基本上一樣。區(qū)別在于它只是屬于一個(gè)類的成員而出現(xiàn)在類

18、中。它可以被指定為類的私有成員( 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è)類若沒(méi)有成員函數(shù)

19、,就退化成C語(yǔ)言的結(jié)構(gòu)體,而失去意義。,2.3 類的成員函數(shù),在類外定義成員函數(shù)成員函數(shù)一般在類體中定義,如前面所講。也可以在類外定義,但要指明是屬于哪個(gè)類的成員函數(shù),用“類名::函數(shù)名”來(lái)指定。例如:,class rectangle { private: int length, width,; int area, perimeter ; public: void PutArea ( ); v

20、oid PutPerimeter ( ); void display ( );};void rectangle:: PutArea ( ){ area = length * width;},void rectangle:: PutPerimeter ( ){ perimeter = (length + width ) * 2; }void rectangle:: display ( ){ cout <<

21、; “l(fā)ength = “<< length << endl; cout << “width = “<< width << endl; cout << “area = “ << area << endl; cout << “perimeter = “ << perimeter ; }rectangle

22、 r1, r2, r3;,這種類定義包括兩個(gè)部分:1、聲明部分(“做什么”): 數(shù)據(jù)成員(名稱、類型) 成員函數(shù)(方法)2、實(shí)現(xiàn)部分(“怎么做”): 成員函數(shù)的定義和實(shí)現(xiàn),,,,2.3 類的成員函數(shù),其中,“::”成為域限定符。如果在域限定符前沒(méi)有類名,或函數(shù)名前既沒(méi)有類名,又沒(méi)有域限定符:::display ( ) 或 display ( )則表示該函數(shù)不屬于任何類,

23、它不是成員函數(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++為此專門(mén)設(shè)

24、立了一個(gè)名為 this 的指針,用來(lái)指向不同的對(duì)象。當(dāng)調(diào)用對(duì)象r1,成員函數(shù)訪問(wèn)的就是r1的成員。,2.4 對(duì)象成員的引用,用對(duì)象名和成員運(yùn)算符( . )訪問(wèn)對(duì)象成員舉例:用這種方式萬(wàn)分的成員,必須定義成公用成員!,class rectangle { public: int length, width; // 公共數(shù)據(jù)成員 void display ( ); // 公共成員函數(shù)};void rectang

25、le:: display ( ){cout <<“area =“ << length* width <<ednl; cout<<“perimeter =“ <<( length+ width)*2; }void main ( ){ rectangle r1; r1.lenght = 5; //用對(duì)象名和成員運(yùn)算符)訪問(wèn)數(shù)據(jù)成員 r1.width = 4;

26、 //用對(duì)象名和成員運(yùn)算符( . )訪問(wèn)數(shù)據(jù)成員 r1.display ( ); //用對(duì)象名和成員運(yùn)算符( . )訪問(wèn)成員函數(shù)},2.4 對(duì)象成員的引用,用指向?qū)ο蟮闹羔樤L問(wèn)對(duì)象成員舉例:用這種方式萬(wàn)分的成員,也必須定義成公用成員!(*p).length 被簡(jiǎn)化成 p->length,class rectangle { public: int length, width; // 公共數(shù)據(jù)成員

27、void display ( ); // 公共成員函數(shù) };void rectangle:: display ( ){cout lenght = 5; p->width = 4; p->display ( ); },2.4 對(duì)象成員的引用,用對(duì)象的引用訪問(wèn)對(duì)象成員舉例:,class rectangle { public: int length, width; // 公共數(shù)據(jù)成員

28、 void display ( ); // 公共成員函數(shù)};void rectangle:: display ( ){cout <<“area =“ << length* width <<ednl; cout<<“perimeter =“ <<( length+ width)*2; }void main ( ){ rectangle r2; re

29、ctangle &r3 = r2; //r3引用r2 r3.lenght = 5; r3.width = 4; r3.display ( ); },編程練習(xí),請(qǐng)同學(xué)們自己閱讀教材55頁(yè)2.5節(jié)的簡(jiǎn)單示例程序。然后編寫(xiě)下列程序:輸入三個(gè)整數(shù),并輸出它們之中的最大值。,2.6 類的封裝和信息隱蔽,公用接口和私有實(shí)現(xiàn)的分離我們已經(jīng)學(xué)到,C++通過(guò)類的封裝,將類的數(shù)據(jù)成員和成員函數(shù)集成到一個(gè)類中。而

30、一般在類的聲明時(shí),往往把數(shù)據(jù)成員指定成私有的,使它們與外界隔離,即,不能在類外直接使用私有成員,外界只能通過(guò)類的公有函數(shù),間接進(jìn)行對(duì)私有成員的操作。換句話說(shuō),外界與類的私有成員的唯一聯(lián)系渠道,就是該類的公有成員函數(shù)。所以,我們一般把成員函數(shù)指定成公有的( public )性質(zhì)(除非某些成員函數(shù)不想讓外界調(diào)用)。這就是所謂的“外部接口”與內(nèi)部實(shí)現(xiàn)的分離,以起到信息隱蔽的作用。而這是軟件工程最基本的原則。,定義一個(gè)類就是實(shí)現(xiàn)對(duì)創(chuàng)

31、建一個(gè)對(duì)象的數(shù)據(jù)結(jié)構(gòu)的描述。 在類中,一些成員是保護(hù)的,被有效地屏蔽,以防外界的干擾和誤操作。 另一些成員是公共的,作為接口提供外界使用。 右圖是對(duì)它們采用的圖示方法說(shuō)明類的組成結(jié)構(gòu)。以Point 類為例。,,,,2.6 類的封裝和信息隱蔽,類聲明和成員函數(shù)定義的分離當(dāng)一個(gè)類被多個(gè)程序使用時(shí),一般將類的聲明(包括成員函數(shù)的聲明)放在指定的頭文件中,用戶在編程時(shí),將該頭文件包含近來(lái)就可以了。而不必在每個(gè)

32、使用該類的程序中重復(fù)書(shū)寫(xiě)該類的聲明。我們?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; p

33、ublic: void Put ( ); void display ( ); };// rectangle.cpp#include #include “rectangle.h”void rectangle::Put ( ){ length = 5; width = 4; }void rectangle:: display ( ){ cout <<“area = “ <<

34、length*width << endl; },// main.cpp#include #include “rectangle.h”void main ( ){ rectangle r1; r1.display ( );},2.6 類的封裝和信息隱蔽,在實(shí)際運(yùn)用中,將若干功能相近的類聲明集中在一起,形成類庫(kù)。類庫(kù)包括兩個(gè)組成部分: 類聲明頭文件; 經(jīng)過(guò)編譯的頭文件函數(shù)的定義的目標(biāo)文件。用戶只需要將類

35、庫(kù)裝入自己的計(jì)算機(jī)中C++系統(tǒng)的子目錄下,并在程序中用#include命令將有關(guān)類聲明的頭文件包含到程序中,就可以使用這些類和其中的成員函數(shù)了。,2.6 類的封裝和信息隱蔽,面向?qū)ο蟪绦蛟O(shè)計(jì)中的幾個(gè)名詞方法:method,指對(duì)數(shù)據(jù)的操作。消息:其實(shí)就是一個(gè)命令,由程序語(yǔ)句實(shí)現(xiàn)。外界通過(guò)發(fā)送“消息”來(lái)激活有關(guān)的方法。比如:rectangle.dispaly ( );就是向rectangle對(duì)象發(fā)一個(gè)消息,通知它執(zhí)行

36、其中的“display ( )”方法。這一條語(yǔ)句就涉及到對(duì)象、消息、方法這三個(gè)術(shù)語(yǔ)。rectangel:是對(duì)象;display ( ):是方法;rectangel.display ( ):是消息。,本章練習(xí),試編寫(xiě)一個(gè)基于對(duì)象的程序,求3個(gè)長(zhǎng)方體的體積。長(zhǎng)方體對(duì)象名為rectangle,數(shù)據(jù)成員包括:length,width,height。要求用成員函數(shù)實(shí)現(xiàn)以下功能:由鍵盤(pán)分別輸入3個(gè)長(zhǎng)方體的長(zhǎng)、寬、高;計(jì)算

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論