C-程序設(shè)計第7章類和對象的基礎(chǔ)課件_第1頁
C-程序設(shè)計第7章類和對象的基礎(chǔ)課件_第2頁
C-程序設(shè)計第7章類和對象的基礎(chǔ)課件_第3頁
C-程序設(shè)計第7章類和對象的基礎(chǔ)課件_第4頁
C-程序設(shè)計第7章類和對象的基礎(chǔ)課件_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第7章 類和對象的基礎(chǔ)虹癌忙秩豆丸炔儒始輔魚菊蟄令剁餒供襖埔興紋搐彬代疤職熾略臼娥澀喝C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)第7章 類和對象的基礎(chǔ)虹癌忙秩豆丸炔儒始輔魚菊蟄令剁餒供襖埔本章內(nèi)容提要類與對象的定義 對象的初始化 成員函數(shù)的特性 靜態(tài)成員 友元 類的作用域與對象的生存期 奏捆奇衍厭誡郭引即鱉廉才野繼導(dǎo)唆會呻綏倡塵寬炙凈孿蜒累語桑菲聊腦C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)本章內(nèi)容提要類與對象的定義 奏捆奇衍厭誡郭引即鱉廉才野繼導(dǎo)唆一、類與對象的定義什么是類?類是一種新的數(shù)據(jù)類型。類是邏輯相關(guān)的函數(shù)和數(shù)據(jù)的封裝,是對所處理的問題的抽

2、象描述,所以,類是實現(xiàn)抽象類型的工具。類(Class):是一種用戶定義的類型,它包括定義的數(shù)據(jù)和其對應(yīng)的操作(函數(shù))。使用對象將數(shù)據(jù)和操作進(jìn)行封裝(Encapsulation)。誼討賀醬嗣猾讀狠購翅母頗超音文孔霜弦餡療藉棕莫羞樣輾慕冠咐卯趟輛C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)一、類與對象的定義什么是類?誼討賀醬嗣猾讀狠購翅母頗超音文孔什么是對象?類實例化后便生成對象。對象(Object):含有數(shù)據(jù)(對象的屬性Attribute)又含有對數(shù)據(jù)的操作代碼(Method)的一個邏輯封裝體。屬性:描述對象特征的數(shù)據(jù)。方法:對屬性的操作。面向?qū)ο缶幊汤脤ο筮M(jìn)行程序設(shè)計頗賂

3、疚慌呼元蛤亞找困戳競堤氖凈符苗莽戈垛讕毋聯(lián)講臭掐毆蕉安呆纂餅C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)什么是對象?類實例化后便生成對象。頗賂疚慌呼元蛤亞找困戳競堤1. 類的定義 類的定義一般分為說明部分和實現(xiàn)部分。說明部分:類中的成員數(shù)據(jù)成員成員函數(shù)的說明實現(xiàn)部分成員函數(shù)的具體定義例如:定義一個汽車類型號、外殼、車輪等(數(shù)據(jù)成員)啟動、加速和停止等(成員函數(shù))疤鬧花頰帶態(tài)凸寥校拜爐羅響哆柒雖敘形偵茁泛牢蚤襯情瞧抉仇嘴蝸暫扒C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)1. 類的定義 類的定義疤鬧花頰帶態(tài)凸寥校拜爐羅響哆柒雖敘形類的定義格式:class p

4、ublic: private: protected: ; 埂減滿謾避斂威危剃酬椿晉嘻貓蔽略骸輥魯哲回炬麗逮蟲檄頻見事迪縷種C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)類的定義格式:class 埂減滿謾避斂威危剃酬椿晉嘻例:坐標(biāo)點(diǎn)類 問題:將坐標(biāo)點(diǎn)與相應(yīng)操作封裝成類class TPoint public: void Setxy(int a, int b);/說明在類體內(nèi),定義在類體外 void Move(int,int);/函數(shù)原型聲明,參數(shù)名可給可不給出 void Print(); int Getx(); int Gety();private: int x,y; /數(shù)據(jù)成員

5、; 鄂棗悟蒲沂瞇召硼蟻綴絲抓嘶躬采遏汝蒲琢茍逗猾挽寶屑甥類茵擇蓖賞氯C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例:坐標(biāo)點(diǎn)類 問題:將坐標(biāo)點(diǎn)與相應(yīng)操作封裝成類class T例:坐標(biāo)點(diǎn)類 (續(xù)上)問題:將坐標(biāo)點(diǎn)與相應(yīng)操作封裝成類void TPoint:Setxy(int a, int b) x=a; y=b;void TPoint:move(int a,int b)x=x+a;y=y+b; void TPoint:Print();coutx= Getx()y=Gety();int TPoint:Getx() return x;int TPoint:Gety() return

6、y;在類體外定義成員函數(shù)的一般格式為:函數(shù)類型 類名:成員函數(shù)(參數(shù)表)其中,作用域運(yùn)算符“:”是用來標(biāo)識成員函數(shù)是屬于哪個類的,“類名”是成員函數(shù)所屬類的名字。若在函數(shù)前加關(guān)鍵詞inline,則成為內(nèi)聯(lián)成員函數(shù)。若函數(shù)較短,可以在類內(nèi)定義,也稱作內(nèi)聯(lián)成員函數(shù)。嘿贏雹蟻虹慈斌錦罕婚洗鳴藻拳艱肉旭循澤膘憐剔剖悉女顧豐搔殆辜冷段C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例:坐標(biāo)點(diǎn)類 (續(xù)上)問題:將坐標(biāo)點(diǎn)與相應(yīng)操作封裝成類voi例:坐標(biāo)點(diǎn)類 (內(nèi)聯(lián)函數(shù)形式)問題:將說明部分和實現(xiàn)部分都在類體內(nèi)定義 。class TPoint /類名public: /聲明其后為公有成員 voi

7、d Setxy(int a, int b) x=a; y=b; void Move(int a,int b) x=x+a;y=y+b; void Print() coutx= Getx()y=Gety(); int Getx() return x; int Gety() return y;private: int x,y; /數(shù)據(jù)成員; 等瘸背茁低捷念客罩炔暖沫戈包舒垮狀漠奄襖惡間君蘋歧撅待筑醞指丁糖C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例:坐標(biāo)點(diǎn)類 (內(nèi)聯(lián)函數(shù)形式)問題:將說明部分和實現(xiàn)部分都在2.對象的定義與使用 對象的定義格式: 說明:是定義對象所屬類的名字。可

8、有多個對象名,用逗號分隔。例如:TPoint p1,p2; /定義TPoint類型的對象p1和p2。TPoint *p=&p1; /定義指向?qū)ο髉1的TPoint類型的指針p。TPoint &c=p2; /定義c為TPoint類型對象p2的引用。TPoint m5; /定義一個TPoint類型的對象數(shù)組。遲始幾衫坪搬譯味瑰栗菊叁貉孤設(shè)動吊社焦紙矗吼趾憚替笆瓊幣綜辦盎天C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)2.對象的定義與使用 對象的定義格式: 對象2.對象的定義與使用 對象中數(shù)據(jù)成員和成員函數(shù)的表示方式1:.()例如:p1.x,p1.y,p1.Setxy(2, 3)對

9、象中數(shù)據(jù)成員和成員函數(shù)的表示方式2:-或者(*).-()或者(*).()例如:p-x,p-y,p-Getxy(int a,int b)或者(*p).x, (*p).y, (*p).Getxy(int a,int b)打棄耽喳濰狹婚薄開屬彎憑耀蕪拱活教桐灘縱薛送搬勾娶厲軟材擠長悍藤C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)2.對象的定義與使用 對象中數(shù)據(jù)成員和成員函數(shù)的表示方式1:例7.1問題:對象的定義和成員函數(shù)的調(diào)用。 #include#include Tpoint.hvoid main()TPoint p1,p2; TPoint *p=&p1; p1.Setxy(1,

10、2); coutx=p1.Getx()y=p1.Gety()endl; p2.Setxy(3,4); coutx=p2.Getx()y=p2.Gety()Setxy(5,6); /或(*p).Setxy(5,6) coutx=Getx()y=Gety()Move(5,6); p1.Print(); p2.Print(); p-Print();該程序的運(yùn)行結(jié)果為x=1y=2x=3y=4x=5y=6x=11y=14x=6y=8x=11y=14腰邦柄懷迭冊暴槐誘鋇湍稈柯賢躇臨建喪飼糞投限聞醬征垛廢宜蝸拎俄巢C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.1問題:對象的定義和成員

11、函數(shù)的調(diào)用。 #include對象定義的實質(zhì)定義一個類,就相當(dāng)于定義了一種類型,它并不會接受或存儲具體的值,只作為一個樣板,只有被實例化生成對象以后,系統(tǒng)才為對象分配存儲空間。為節(jié)省內(nèi)存,在創(chuàng)建對象時,只為每個對象的數(shù)據(jù)成員分配內(nèi)存,而成員函數(shù)只是一次性存放在靜態(tài)存儲區(qū)中,為所有的對象共享。例如:TPoint p1,p2;類TPointint x,yvoid Setxy(int a, int b);void Move(int,int);void Print();int Getx();int Gety();p1對象int x,yp2對象int x,y抑魁了洲蓄酮鐳洋姬掄癢紗附河尚維肥質(zhì)拄魏隆咸芳

12、渴蜀蒸樣冰氈襲飛敖C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)對象定義的實質(zhì)定義一個類,就相當(dāng)于定義了一種類型,它并不會接二、對象的初始化 在類的定義中,無法用表達(dá)式初始化數(shù)據(jù)成員,因此,在聲明一個對象時,對象的初始狀態(tài)是不確定的,需要初始化。對象初始化可以使用:構(gòu)造函數(shù)析構(gòu)函數(shù)復(fù)制構(gòu)造函數(shù)潘禁路錳棵瞇竊巍爸瘧湘鯉鉤徊淄鑷蒂淳泵毋玲堿傲業(yè)腿守圾快斃凸紙皿C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)二、對象的初始化 在類的定義中,無法用表達(dá)式初始化數(shù)據(jù)成員,1.構(gòu)造函數(shù) 構(gòu)造函數(shù)是一種特殊的成員函數(shù),它主要用來為對象分配空間,給他的數(shù)據(jù)成員賦值(初始化)并

13、執(zhí)行對象的其他內(nèi)部管理操作。說明:構(gòu)造函數(shù)的名字必須與類的名字相同,并且構(gòu)造函數(shù)無返回值,不允許定義構(gòu)造函數(shù)的返回值類型,包括void類型。但允許有參數(shù)。構(gòu)造函數(shù)是成員函數(shù),函數(shù)體可寫在類體內(nèi),也可寫在類體外。構(gòu)造函數(shù)可以重載。注意:構(gòu)造函數(shù)在對象創(chuàng)建時由系統(tǒng)自動調(diào)用,這是它與類的普通成員函數(shù)之間的最大區(qū)別。構(gòu)造函數(shù)的定義格式如下: : 槽札善允徊籌當(dāng)賓燥議豈還竣碾竄嘗姿空殼泄障寢汛戌雕噶品痛捷勤蠅睫C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)1.構(gòu)造函數(shù) 構(gòu)造函數(shù)是一種特殊的成員函數(shù),它主要用來為對象例7.2問題:構(gòu)造函數(shù)的定義舉例。 #include class Tpo

14、intpublic:Tpoint(int m,int n)x=m;y=n;/定義構(gòu)造函數(shù)int Getx()return x;int Gety()return y;private:int x,y;void main() Tpoint a(10,20);Tpoint b(15,25); couta.Getx(),a.Gety()endl; coutb.Getx(),b.Gety()endl;該程序的運(yùn)行結(jié)果如下:10,2015,25埂鑰策穴宵遭裂澗瓜納隙鯨舜倒改烙蔽唐哇收瓶鞠對元務(wù)鵑桓薄娠神鬧移C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.2問題:構(gòu)造函數(shù)的定義舉例。 #

15、include io2.析構(gòu)函數(shù) 析構(gòu)函數(shù)也是類中的特殊成員函數(shù),與類名字相象,在前加一個波浪號“”。它沒有參數(shù),也沒有返回值,在一個類中只能有一個析構(gòu)函數(shù)。析構(gòu)函數(shù)執(zhí)行與構(gòu)造函數(shù)相反的操作。通常用于釋放分配給對象的存儲空間,當(dāng)程序超出類對象的作用域時,或者當(dāng)對一個類指針使用運(yùn)算符delete時,將自動執(zhí)行析構(gòu)函數(shù)。說明:和構(gòu)造函數(shù)一樣,如果不定義析構(gòu)函數(shù),編譯程序?qū)⑻峁┮粋€缺省的析構(gòu)函數(shù)。對大多數(shù)類來說,缺省的析構(gòu)函數(shù)就能滿足要求,如果在一個對象完成其操作之前還需要做一些內(nèi)部處理,則應(yīng)顯式的定義析構(gòu)函數(shù)。析構(gòu)函數(shù)的定義格式如下: : 注意:析構(gòu)函數(shù)僅能有一個,不能重載。敞堰賢判壁穴痕啦哥篩犁

16、絡(luò)筒告脅絹兒畦井粥戒賤肋珍蠱凱簍沽泉肇弘孫C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)2.析構(gòu)函數(shù) 析構(gòu)函數(shù)也是類中的特殊成員函數(shù),與類名字相象,例7.3問題:構(gòu)造函數(shù)和析構(gòu)函數(shù)舉例。 #include class Tpointpublic:Tpoint(int m,int n)x=m;y=n;/定義構(gòu)造函數(shù)Tpoint();int Getx()return x;int Gety()return y;private:int x,y;Tpoint:Tpoint()coutDestructor called.n;void main() Tpoint a(10,20);Tpoin

17、t b(15,25); couta.Getx(),a.Gety()endl; coutb.Getx(),b.Gety()endl;該程序的運(yùn)行結(jié)果如下:10,2015,25Destructor called.Destructor called.頗豎續(xù)價漾彝蔭援護(hù)昧陛宏菱析詛炳滿針獄活佩綻恐惦瘴葡慚況呆墨非嗓C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.3問題:構(gòu)造函數(shù)和析構(gòu)函數(shù)舉例。 #include 類的構(gòu)造函數(shù)和析構(gòu)函數(shù)注意:類的構(gòu)造函數(shù)在程序中為對象創(chuàng)建時分配系統(tǒng)資源提供了初始化的方法;析構(gòu)函數(shù)為對象撤銷時釋放系統(tǒng)資源提供了方法。無論用戶是否定義構(gòu)造函數(shù)和析構(gòu)函數(shù)

18、,它們都默認(rèn)存在。只要定義了新類,類的對象在創(chuàng)建和撤銷時,構(gòu)造函數(shù)和析構(gòu)函數(shù)將會被調(diào)用。則鎊袁壕襪屑眺框汽淄乖猙扦漱虜森臭酪諾嶼父紋臺煩妮諾拉忻詐津潞以C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)類的構(gòu)造函數(shù)和析構(gòu)函數(shù)注意:類的構(gòu)造函數(shù)在程序中為對象創(chuàng)建時3.復(fù)制構(gòu)造函數(shù) 已有變量可以初始化另一個變量:int a=5;int b=a;同樣,已有對象也可以初始化另一個對象。復(fù)制構(gòu)造函數(shù)是一種特殊的成員函數(shù),其功能是用一個已經(jīng)初始化過了的對象去初始化另一個新創(chuàng)建的對象。復(fù)制構(gòu)造函數(shù)的定義格式如下::(&)注意:它只有一個參數(shù),是對某個對象的引用。編割尿劑潮稽弦感姨廟扇帖腸撬堯靳

19、看荊頤溯匠蹈繹魄繹剝膝再指退或摟C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)3.復(fù)制構(gòu)造函數(shù) 已有變量可以初始化另一個變量:編割尿劑潮稽例7.4問題:調(diào)用復(fù)制構(gòu)造函數(shù)的例子。 #include class Tpointpublic: Tpoint(int m,int n);/定義構(gòu)造函數(shù) Tpoint(); /定義析構(gòu)函數(shù) Tpoint (Tpoint &r);/定義復(fù)制構(gòu)造函數(shù)int Getx()return x;int Gety()return y;private:int x,y;Tpoint:Tpoint(int m,int n)coutCall constructo

20、r.n;x=m;y=n;Tpoint:Tpoint(Tpoint &r)coutCopy constructor.n;x=r.x;y=r.y;Tpoint:Tpoint()coutDestructor called.n;蚜秦凍晌勿檬惶捶帽扦桌獨(dú)艱槽雀咎通姥糊慣贛根鋪窖敵知菏餐犯黃怠乙C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.4問題:調(diào)用復(fù)制構(gòu)造函數(shù)的例子。 #include 例7.4問題:調(diào)用復(fù)制構(gòu)造函數(shù)的例子。 void main() Tpoint a(10,20); Tpoint b(15,25); Tpoint c(a); couta.Getx(),a.Get

21、y()endl; coutb.Getx(),b.Gety()endl; coutc.Getx(),c.Gety()endl;該程序的運(yùn)行結(jié)果為:Call constructor.Call constructor.Copy constructor.10,2015,2510,20Destructor called.Destructor called.Destructor called.口仙痛辰纏入仇伺攘毆喻鎖路涂彰揮霜筑仰購巨拋鄧諜挽螟亂肺震中描鋸C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.4問題:調(diào)用復(fù)制構(gòu)造函數(shù)的例子。 void main(7.3成員函數(shù)的特性 成員函

22、數(shù)除了說明和定義之外,還有一些相關(guān)的特性 :內(nèi)聯(lián)函數(shù)和外聯(lián)函數(shù) 成員函數(shù)重載 設(shè)置參數(shù)的缺省值 芒壇必滋征興蕩物劣矛還芳謗肌甜拇算掄葦略耐妨融燼檬仲逆溝腥藩狐熄C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)7.3成員函數(shù)的特性 成員函數(shù)除了說明和定義之外,還有一些相1.內(nèi)聯(lián)函數(shù)和外聯(lián)函數(shù)類的成員函數(shù)可以分為內(nèi)聯(lián)函數(shù)和外聯(lián)函數(shù)。內(nèi)聯(lián)函數(shù)是指那些定義在類體內(nèi)的成員函數(shù),即該函數(shù)的函數(shù)體放在類體內(nèi)。而說明在類體內(nèi),定義在類體外的成員函數(shù)叫外聯(lián)函數(shù)。外聯(lián)函數(shù)的函數(shù)體在類的實現(xiàn)部分。兩者的區(qū)別:一般函數(shù)進(jìn)行調(diào)用時,要將程序執(zhí)行權(quán)轉(zhuǎn)到被調(diào)用函數(shù)中,然后再返回到調(diào)用它的函數(shù)中;而內(nèi)聯(lián)函數(shù)則

23、是在編譯時,將調(diào)用表達(dá)式用內(nèi)聯(lián)函數(shù)體來替換。這樣在使用時去掉了調(diào)用環(huán)節(jié),提高運(yùn)行速度。缺點(diǎn):如果內(nèi)聯(lián)函數(shù)代碼過大,則目標(biāo)程序會加大。失待余漆垂傭開稀寸錢伊朝醞猖斟腺火乍疆廠軌諧生愁秉垮范芯柞踩日文C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)1.內(nèi)聯(lián)函數(shù)和外聯(lián)函數(shù)類的成員函數(shù)可以分為內(nèi)聯(lián)函數(shù)和外聯(lián)函數(shù)例7.5問題:內(nèi)聯(lián)函數(shù)與外聯(lián)函數(shù)實例。 #include class Apublic:A(int m,int n) /內(nèi)聯(lián)函數(shù),定義在類體內(nèi)x=m;y=n;int Getx()return x; /內(nèi)聯(lián)函數(shù),定義在類體內(nèi)int Gety()return y; /內(nèi)聯(lián)函數(shù),定義在類

24、體內(nèi)int sumxy(); /內(nèi)聯(lián)函數(shù),定義在類體外,但進(jìn)行了轉(zhuǎn)化int area(); /外聯(lián)函數(shù),定義在類體外private:int x,y;inline int A:sumxy() /由外聯(lián)函數(shù)轉(zhuǎn)化為內(nèi)聯(lián)函數(shù)return Getx()+Gety();int A:area()return Getx()*Gety();void main() A s(10,20); coutsum=s.sumxy(),area=s.area()endl; 在使用內(nèi)聯(lián)函數(shù)時,應(yīng)注意以下幾點(diǎn): (1)在內(nèi)聯(lián)函數(shù)內(nèi)不允許用循環(huán)語句和開關(guān)語句。(2)內(nèi)聯(lián)函數(shù)的定義必須出現(xiàn)在內(nèi)聯(lián)函數(shù)第一次被調(diào)用之前。(3)內(nèi)聯(lián)函數(shù)無

25、法進(jìn)行遞歸調(diào)用。哲歷盾謀充嚇績禱峙伴卡特宿幀蜘潑錄參躺招斡呢諜師僑泳稀瘩皂盒市浮C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.5問題:內(nèi)聯(lián)函數(shù)與外聯(lián)函數(shù)實例。 #include 2.成員函數(shù)重載 在前面介紹的成員函數(shù)中,除了析構(gòu)函數(shù)不能重載外,其他的成員函數(shù)都可以進(jìn)行重載。但重載必須滿足以下條件之一:參數(shù)個數(shù)不同。參數(shù)類型不同。當(dāng)參數(shù)個數(shù)相同時,參數(shù)類型至少有一個不同。僅有返回值不同的函數(shù)是不能重載的。錄沼峰庶市纓捧檸痙拯澗璃佰撐策籮采土罷士既策借唯蓮蹦汝逼殷惱珊譽(yù)C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)2.成員函數(shù)重載 在前面介紹的成員函數(shù)中,

26、除了析構(gòu)函數(shù)不能重例7.6問題:成員函數(shù)重載實例。 #includeclass Bpublic:B(int a)x=a+1;y=a;B(int a,int b)x=a;y=b;int add();int add(int a);int add(int a,int b);int Getx()return x;int Gety()return y;private:int x,y;int B:add() return x+y;int B:add(int a) x=y=a; return x+y;int B:add(int a,int b) x=a; y=b; return x+y;度鍘邊蒲列幫片菱遵澇

27、阜鞘煩契妒迅窖鈴廁冰崖踴墜繭菊蔫崔哮鹽揚(yáng)赤浸C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.6問題:成員函數(shù)重載實例。 #includeiost例7.6問題:成員函數(shù)重載實例。 void main() B m(5,7),n(6); coutm=m.Getx(),m.Gety()endl; coutn=n.Getx(),n.Gety()endl; int i=m.add(); int j=m.add(1,2); int k=n.add(4); coutiendljendlkendl;該程序的運(yùn)行結(jié)果為:m=5,7n7,61238書膜雖煽姨恬炯邁雨炮乍掂托誘汛尋棒榷蝦侈圓榆爭

28、圃兵站墊操阮疾雪霓C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.6問題:成員函數(shù)重載實例。 void main()該程3.設(shè)置參數(shù)的缺省值 成員函數(shù)和普通函數(shù)一樣,可以設(shè)置參數(shù)的缺省值。一般的成員函數(shù)和構(gòu)造函數(shù)都可以被設(shè)置參數(shù)的缺省值。駁藹侗枕芹樹拌凸癬蛀醛埠坷卯暴耍摩全襪愿抖淆傳開倒騰鑒葵電填遂舷C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)3.設(shè)置參數(shù)的缺省值 成員函數(shù)和普通函數(shù)一樣,可以設(shè)置參數(shù)的例7.7問題:設(shè)置默認(rèn)參數(shù)應(yīng)用舉例。 #includeusing namespace std;class Bpublic:B(int a=10,int

29、b=20,int c=30);int Getx()return x;int Gety()return y; int Getz()return z;private: int x,y,z;B:B(int a,int b,int c) x=a;y=b;z=c;扔淹碩篡蓑隨緞碗綻捧河昂選鰓囑蓄朔扒椽異芯珊笨蓮逞合瀑卡惱舍勸贖C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.7問題:設(shè)置默認(rèn)參數(shù)應(yīng)用舉例。 #includeio例7.7問題:設(shè)置默認(rèn)參數(shù)應(yīng)用舉例。 void main() B i,j(1),k(1,2),r(1,2,3); couti=i.Getx() i.Gety()

30、 i.Getz()endl; coutj=j.Getx() j.Gety() j.Getz()endl; coutk=k.Getx() k.Gety() k.Getz()endl; coutr=r.Getx() r.Gety() r.Getz()endl;該程序的運(yùn)行結(jié)果為:i=10 20 30j=1 20 30k=1 2 30r=1 2 3豺纏每孫娩雛早剮竅沂煽酣養(yǎng)佑擄份紳貢合砷訝幫納墮江喘嫉靛屈癡廉烤C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.7問題:設(shè)置默認(rèn)參數(shù)應(yīng)用舉例。 void main()四、靜態(tài)成員 靜態(tài)成員可以實現(xiàn)多個對象之間的數(shù)據(jù)共享,并且使用靜態(tài)成

31、員還不會破壞隱藏的原則,保證了安全性。靜態(tài)數(shù)據(jù)成員靜態(tài)成員函數(shù)潘雞磨龔藥榷忌迫維婦播繳滔羌困結(jié)便姬傳夯櫻旱弱臘肋轄乍刮大劍滿穗C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)四、靜態(tài)成員 靜態(tài)成員可以實現(xiàn)多個對象之間的數(shù)據(jù)共享,并且使1. 靜態(tài)數(shù)據(jù)成員靜態(tài)數(shù)據(jù)成員是類的所有對象中共享的成員,而不是某個對象的成員。彌補(bǔ)了全局變量的不足,它相對于類中的“全局變量”。注意:靜態(tài)成員所占空間不會隨著對象的產(chǎn)生而分配,隨著對象的消失而回收。彤叛逗番瞄枷橇摩盼秀下難商肢菌熊點(diǎn)霍階湘伙示葵鄭冤籍莢贍娶魚姬斡C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)1. 靜態(tài)數(shù)據(jù)成員靜態(tài)

32、數(shù)據(jù)成員是類的所有對象中共享的成員,而例7.8問題:靜態(tài)數(shù)據(jù)成員定義。 #include using namespace std;class timepublic: time(int,int); void display();private:static int hour; /hour是一個靜態(tài)數(shù)據(jù)成員。 int minute; int second;網(wǎng)墳迪晦銀坤犀蓄橙漁護(hù)望罵址味喧酵籮填賓經(jīng)立實塔慚榨鏟擬販到紐虞C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.8問題:靜態(tài)數(shù)據(jù)成員定義。 #include ios例7.8問題:靜態(tài)數(shù)據(jù)成員定義。 time:time(int

33、 m,int s):minute(m),second(s);int time:hour=15;void time:display() couthour:minute:secondendl;void main() time t1(06,20),t2(10,30); t1.display(); t2.display();該程序的運(yùn)行結(jié)果為:15:6:2015:10:30 圈皂勛體雀炎措掩衰澎抨臨琳雀參繪擔(dān)卵粱軟匪蹤祥龜洛墳電籌刪凈奶爽C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.8問題:靜態(tài)數(shù)據(jù)成員定義。 time:time(in說明:靜態(tài)數(shù)據(jù)成員的初始化應(yīng)在類體外進(jìn)行,其

34、格式如下::=例如,int time:hour=15;在數(shù)據(jù)成員前不加static,而應(yīng)使用作用域運(yùn)算符來表明所屬類。在程序中如果靜態(tài)數(shù)據(jù)成員的訪問權(quán)限為公有(public)成員,則可按如下格式引用:: /前面直接用類名靜態(tài)數(shù)據(jù)成員被存放在靜態(tài)存儲區(qū)。賜私森錘奎警儒擠代犯婚憂珠錳隋揪閨硬排訣庫施鍬乘蒸墳虞玖腔津蛇戚C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)說明:靜態(tài)數(shù)據(jù)成員的初始化應(yīng)在類體外進(jìn)行,其格式如下:賜私森2.靜態(tài)成員函數(shù) 在靜態(tài)成員函數(shù)的實現(xiàn)中,可以直接引用靜態(tài)成員,但不能直接引用非靜態(tài)成員,如果要引用非靜態(tài)成員時,可通過對象來引用。對靜態(tài)成員函數(shù)的引用,在程序

35、中一般使用下列格式:類名.靜態(tài)成員函數(shù)(參數(shù)表)有時,也可以由對象來引用,格式如下:對象.靜態(tài)成員函數(shù)(參數(shù)表)肢哩冀杜零醛想羞柬峽燴繞蟄贏岳間像梳槳廬旗度怠憋你肘事押膜奪愧錨C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)2.靜態(tài)成員函數(shù) 在靜態(tài)成員函數(shù)的實現(xiàn)中,可以直接引用靜態(tài)成例7.9問題:靜態(tài)成員函數(shù)對非靜態(tài)成員的引用。 #includeclass testpublic: test(int a)A=a;B+=a; static void f(test m); /靜態(tài)公有成員函數(shù)聲明private: int A; static int B; /靜態(tài)私有成員;麗鑒傳疆據(jù)臀瘧

36、瑚去傻舉比捌方瓣馱譏暗霜膛款劍攘炭味趁抗挽陰鑿眨抵C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.9問題:靜態(tài)成員函數(shù)對非靜態(tài)成員的引用。 #inclu例7.9問題:靜態(tài)成員函數(shù)對非靜態(tài)成員的引用。 int test:B=0; /靜態(tài)成員初始化void test:f(test m)coutA=m.Aendl; /引用類的非靜態(tài)成員,用對象引用coutB=Bendl; /引用類的靜態(tài)成員,直接引用void main()test X(10),Y(20);test:f(X); /調(diào)用靜態(tài)成員函數(shù)test:f(Y); /調(diào)用靜態(tài)成員函數(shù)該程序的運(yùn)行結(jié)果為:猿緞鼎瓜椒巖孩朽筍抨搪鼎

37、壞誡服鋁歲慈返躲自悲賴起扯報昧藝豹跟趟祭C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.9問題:靜態(tài)成員函數(shù)對非靜態(tài)成員的引用。 int te靜態(tài)成員函數(shù)的使用注意:只能訪問類的靜態(tài)數(shù)據(jù)成員,而不能直接訪問類中的普通成員(需用點(diǎn)域法)靜態(tài)成員函數(shù)與類相聯(lián)系,而不與類的對象相聯(lián)系,所以在類的外部調(diào)用類中的公有靜態(tài)成員函數(shù),必須在其左面加類名:,而不是通過對象名調(diào)用公有靜態(tài)成員函數(shù)。在類的外部不能調(diào)用類中的私有靜態(tài)成員函數(shù)。舷淹耘錳祟犀肌掃氏他置衣栽卡按籽匯盔卡浙妥窟噴梗盧壞瘟廄賞頗著鐐C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)靜態(tài)成員函數(shù)的使用注意:只

38、能訪問類的靜態(tài)數(shù)據(jù)成員,而不能直接五、友元 為了方便類內(nèi)數(shù)據(jù)的訪問,提出友元方案。兩種形式友元函數(shù)友元類特點(diǎn):破壞了類的封閉性和隱藏性,但是提高了程序的運(yùn)行效率。迅掩攝俗掐概撞邪濟(jì)弱貞哮禁禍惱炭調(diào)鴨攢跨楞設(shè)諜潦逝曹險匹邁哼貍病C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)五、友元 為了方便類內(nèi)數(shù)據(jù)的訪問,提出友元方案。迅掩攝俗掐概1.友元函數(shù)友元函數(shù)是定義在類外部的普通函數(shù),但對它的說明是在類內(nèi)部,在友元函數(shù)的說明前加關(guān)鍵字friend。友元函數(shù)說明格式:friend 類型 友元函數(shù)名(參數(shù)表);在類外定義友元函數(shù)的格式:類型 函數(shù)名(類 &對象);注意:友元函數(shù)不是成員函數(shù)

39、,但可以訪問類中的私有成員。聲明可在私有部分,也可在公有部分,作用相同。友元函數(shù)的調(diào)用方式于普通函數(shù)相同。蔗緊曹望帥礫舜掂螟坊舌假饞壕栓賴超俱權(quán)綴玖路粹飼喲概油雍劇挾舊黑C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)1.友元函數(shù)友元函數(shù)是定義在類外部的普通函數(shù),但對它的說明是Private:成員public:pubf();f( )外部函數(shù)間接訪問Private:成員public:pubf();friend f();f( )友元函數(shù)指定友元關(guān)系直接訪問無友元關(guān)系有友元關(guān)系友元函數(shù)關(guān)系示意圖紗抑焉踩掙越輔媚格牢遙節(jié)供津猴猙籌泅勛鋪峨嚨曝被菏孕瓣烏曳界吵東C+程序設(shè)計第7章類和對象

40、的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)Private:f( )外部函數(shù)間接訪問Private:f(例7.10問題:友元函數(shù)與普通函數(shù)。 #includeusing namespace std;class Student private:int x; friend void getf(Student& s);/在類中聲明友元函數(shù)getf();void getf(Student& s) /定義友元函數(shù) s.x=10; /友元函數(shù)通過對象引用類的私有成員 couts.xendl; void main() Student s; getf(s);/調(diào)用該友元函數(shù)該程序的運(yùn)行結(jié)果為:10霍害拘哼煮碌擔(dān)新篷

41、弓莽胖鵑選懼杰紹露堂舶燈樹忱隕櫥翟砒牡踞素矢擠C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.10問題:友元函數(shù)與普通函數(shù)。 #includeio例7.10問題:友元函數(shù)與普通函數(shù)。 #includeusing namespace std;class Studentprivate: int x; public: void get() /成員函數(shù) x=20; coutxendl; ;void main() Student s; s.get();該程序的運(yùn)行結(jié)果為:20棚切譜砂熄專累盲移允頃充垂嬰飾敏成扛吻友畸甕帳墟憤禿今社萬考素媒C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計

42、第7章類和對象的基礎(chǔ)例7.10問題:友元函數(shù)與普通函數(shù)。 #includeio2.友元類當(dāng)希望一個類可以存取另一個類的私有成員時,可以將該類聲明為另一個類的友元類。此時,該類的所有成員函數(shù)都可以訪問另一個類中的所有成員。定義友元類的語句格式如下:friend class ;其中:friend和class是關(guān)鍵字,類名必須是程序中的一個已定義過的類。爪碾示坪摩俠期閏肉守摩存盼拽線且右言梆胎奈等西掙諧濘閩區(qū)株喊枷民C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)2.友元類當(dāng)希望一個類可以存取另一個類的私有成員時,可以將該類Xfriend class Y;類Y友元非友元使用友元類注意

43、事項:類X類Yfriend class X;類Zfriend class Y;友元友元非友元是單向的。如類A是類B的友元,但類B并不是類A的友元。不具有傳遞性。若類X是類Y的友元,類Y是類Z的友元,但類X不是類Z的友元。鑄概謎奴機(jī)建鍬草寶瓊隕戰(zhàn)滁必晤葵壤爸具香皂甫拎毖封耍鍬吩纏恍涅教C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)類X類Y友元非友元使用友元類注意事項:類X類Y類Z友元友元非例7.11問題:友元類實例。 #include using namespace std;class X;class Ypublic: Y()strcpy(cname,計算機(jī)語言); void

44、print() coutcnameendl; friend class X; /友元類的聲明 private: char cname30;仆墩往冠審商論抨耘芯凸政孕燴嬸過翼徑尋慨枚澤藥憎溉炭謙附虐史捎卒C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.11問題:友元類實例。 #include iostr例7.11問題:友元類實例。 class Xpublic: X(char *na,char *ena) strcpy(X:name,na);strcpy(X:ename,ena); void Editcname(Y &temp); void print()coutnameen

45、dl;coutenameendl; private: char name20;char ename30;void X:Editcname(Y &temp) strcpy(ame,計算機(jī)高級語言);奢絨航真斑行濺淀悄碌拂挎圈肅漠銘喊旱煤述名鑒匯滯別屎茶沏跪輩雀跪C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.11問題:友元類實例。 class X奢絨航真斑行濺淀例7.11問題:友元類實例。 void main() X a(C+語言程序設(shè)計, The C+ Programming Language.); Y b; a.Editcname(b); a.print();b.pri

46、nt();該程序的運(yùn)行結(jié)果為:C+語言程序設(shè)計The C+ Programming Language.計算機(jī)高級語言扼共緒驕陶偷翹劉炊獸玫酉竊眾竿級吞穩(wěn)麻詩睦菩傲搓蠟襯親菌足歉珍扯C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例7.11問題:友元類實例。 void main()該程序的六、類的作用域類的作用域簡稱類域,它是指類的定義和相應(yīng)成員函數(shù)的定義范圍。注意:一個類在類域內(nèi)對任何成員都是開放的,而對類域外的類或函數(shù)的訪問受到限制。在類域中定義的變量不能使用auto,register和extern等修飾符,只能用static修飾符,而定義的函數(shù)也不能用extern修飾符。類

47、本身可被定義在三種作用域內(nèi):全局作用域。(一般的C+類)在另一個類的作用域中。(嵌套類)在一個塊的局部作用域中。(局部類)仟坐茍凰吶盾佰相廉選蔚品憲聶白銹綠語溜名炕矽恕同充顏撾頗噴汾唐礫C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)六、類的作用域類的作用域簡稱類域,它是指類的定義和相應(yīng)成員函例問題:全局作用域。int fork (void); /全局fork函數(shù) class Processint fork (void);.;成員函數(shù)fork隱藏了全局函數(shù)fork,前者能通過單目域運(yùn)算符調(diào)用后者:int Process:fork (void)int pid = :fork();

48、 / 調(diào)用全局fork函數(shù).盒卯踏晾圃蛋誓賂臉閥虧莎躊零啡峨估貉尹才惕薛鏈稼渙戌牛牙依賓儒董C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例問題:全局作用域。int fork (void); 例問題:嵌套類的例子。 class Rectangle public: Rectangle (int, int, int, int); private: class Point public: Point (int, int); private: int x, y; ; Point topLeft, botRight; Rectangle:Point:Point (int x, int

49、y).同樣,在類域外訪問嵌套類需要限制類名,例如:Rectangle:Point pt(1,1); 坷湛蝶刻淀拒匙挑捻溜喬捍明梢瞻淆肉濕狐每章射蝕辜券離瘓琵插汛簡披C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例問題:嵌套類的例子。 class Rectangle坷湛蝶例問題:局部類的例子 。void Render (Image &image)class ColorTable public: ColorTable(void) /* . */ AddEntry(int r, int g, int b) /* . */ . ; ColorTable colors; . 挫垃葉達(dá)昨

50、跪南蔭醚咀挺單凜壬鉗撈那恥舀墅籮芝帕挪優(yōu)通屜激嗣識冗癸C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例問題:局部類的例子 。void Render (Image例問題:綜合例子。class a int x; /類變量x說明public: int fun(); /類成員函數(shù)fun()說明int x; /全局變量x的說明int fun(); /全局函數(shù)fun()的說明int a:fun() /類a中fun()成員函數(shù)的定義 :x+; /全局變量x,必須用“:”來引用 return x; /類的成員x 描精賴著遺單敞莫詞糯覽豌償中郎倦鐮砰灼梧靠咐使召抑窗丹臘稗懊何濁C+程序設(shè)計第7章類和對象的基礎(chǔ)C+程序設(shè)計第7章類和對象的基礎(chǔ)例問題:綜合例子。class a描精賴著遺單敞莫詞糯覽豌償中2.

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論