




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第3講 類和對(duì)象(下),對(duì)象數(shù)組 對(duì)象指針 共用數(shù)據(jù)的保護(hù) 對(duì)象的動(dòng)態(tài)建立和釋放 對(duì)象的賦值和復(fù)制 靜態(tài)成員 友元 類模板,參考教材第9章的內(nèi)容,對(duì)象數(shù)組:一組同類對(duì)象集合,例如Student stud50; 為什么需要對(duì)象數(shù)據(jù)? 對(duì)象數(shù)組的初始化? 同樣使用構(gòu)造函數(shù)來(lái)初始化。每個(gè)元素都需要調(diào)用構(gòu)造函數(shù)。也在定義數(shù)組時(shí)提供實(shí)參以實(shí)現(xiàn)初始化 一般格式:在花括號(hào)中分別寫(xiě)出構(gòu)造函數(shù)并指定實(shí)參。 類名 對(duì)象名長(zhǎng)度=構(gòu)造函數(shù)(實(shí)參列表1),構(gòu)造函數(shù)(實(shí)參列表2), 例如 Student Stud2=Student(1001,18,87), Student(1002,19,76) /分別2次調(diào)用構(gòu)造函數(shù),
2、為兩個(gè)對(duì)象提供3個(gè)實(shí)參來(lái)初始化,3.1 對(duì)象數(shù)組,對(duì)象數(shù)組的定義和初始化,例. 對(duì)象數(shù)組的使用方法,3.2 對(duì)象指針,對(duì)象相關(guān)指針類型 指向?qū)ο笾羔?指向?qū)ο髷?shù)據(jù)成員指針 指向?qū)ο蠛瘮?shù)指針 this 指針,構(gòu)建對(duì)象時(shí),系統(tǒng)會(huì)為對(duì)象分配一定的存儲(chǔ)空間,以存放其成員。對(duì)象空間的起始地址即:對(duì)象的指針 可定義同類型的指針變量,用來(lái)存放某對(duì)象的指針,3.2 對(duì)象指針,指向?qū)ο蟮闹羔樇捌渲羔樧兞?指向?qū)ο笾心硞€(gè)數(shù)據(jù)成員的地址 定義方法和指向普通變量的指針變量方法相同。例:int *p1; 如果類的數(shù)據(jù)成員為公用,則可在類外通過(guò)對(duì)象成員的指針變量訪問(wèn)。例:p1=,3.2 對(duì)象指針,指向?qū)ο髷?shù)據(jù)成員的指針變
3、量,指向?qū)ο蟪蓡T函數(shù)的指針 指向?qū)ο笾心硞€(gè)成員函數(shù)的入口地址 和普通函數(shù)的指針變量定義方法有所不同。要求3方面匹配: 函數(shù)參數(shù)類型和個(gè)數(shù);函數(shù)返回值類型;所屬類 定義指向成員函數(shù)的指針變量一般形式: 數(shù)據(jù)類型 (類名*指針變量名)(參數(shù)表列); 例如:void (Time*p2)( ); 指針變量名= 常對(duì)象:在所有的場(chǎng)合中,常對(duì)象中的所有成員的值都不能被修改,只能初始化 例:Time const t1(12,34,46); 常對(duì)象定義的一般形式為: 類名 const 對(duì)象名(實(shí)參表列); 或者 const 類名 對(duì)象名(實(shí)參表列); 注意2:如果一個(gè)對(duì)象被聲明為常對(duì)象,則不能調(diào)用該對(duì)象的非c
4、onst型的成員函數(shù)(除了由系統(tǒng)自動(dòng)調(diào)用的隱式的構(gòu)造函數(shù)和析構(gòu)函數(shù)),3.3 共用數(shù)據(jù)的保護(hù),1.常對(duì)象,特別注意:如果“引用常對(duì)象中的數(shù)據(jù)成員”,需將該成員函數(shù)聲明為const;因?yàn)橹荒苷{(diào)用常對(duì)象中的const成員函數(shù),而不能調(diào)用其中的非const成員函數(shù),2. 常成員函數(shù) 如果將成員函數(shù)聲明為常成員函數(shù),則只能引用本類中的數(shù)據(jù)成員,不能修改它們,例:void get_time( ) const; 注意:在聲明函數(shù)和定義函數(shù)時(shí)都要有const關(guān)鍵字,在調(diào)用時(shí)不必加const 常成員函數(shù)可以引用const數(shù)據(jù)成員,也可引用非const數(shù)據(jù)成員 注意: (1)如果要求所有的數(shù)據(jù)成員的值都不允許改
5、變,則可以將對(duì)象聲明為常對(duì)象,然后用const成員函數(shù)引用數(shù)據(jù)成員?;?將所有的數(shù)據(jù)成員聲明為const (2)如果在一個(gè)類中,有些數(shù)據(jù)成員的值允許改變,另一些數(shù)據(jù)成員的值不允許改變。則可以將不允許改變數(shù)據(jù)成員聲明為const,以保證其值不被改變,3.3 共用數(shù)據(jù)的保護(hù),3. 常數(shù)據(jù)成員 和一般常變量相似,用關(guān)鍵字const來(lái)聲明常數(shù)據(jù)成員。常數(shù)據(jù)成員的值是不能改變的 注意: 只能通過(guò)構(gòu)造函數(shù)的參數(shù)初始化表對(duì)常數(shù)據(jù)成員進(jìn)行初始化;不能采用在構(gòu)造函數(shù)中對(duì)常數(shù)據(jù)成員賦初值的方法 例:假設(shè)在類Time中定義了const int hour;則構(gòu)造函數(shù)應(yīng)為:TimeTime(int h):hour(h)
6、 ,3.3 共用數(shù)據(jù)的保護(hù),三者關(guān)系表,3.3 共用數(shù)據(jù)的保護(hù),4.指向?qū)ο蟮某V羔樧兞?5.指向常變量的指針變量 6.對(duì)象的常引用 此處刪除N個(gè)字.,溫馨提示:教材9.6節(jié)可以不看,用new和delete運(yùn)算符動(dòng)態(tài)申請(qǐng)和釋放內(nèi)存(參見(jiàn)7.1.7節(jié)) 如果定義了Box類,可動(dòng)態(tài)地建立一個(gè)對(duì)象: Box *pt; Box *pt=new Box(12,15,18); 編譯系統(tǒng)會(huì)開(kāi)辟一段內(nèi)存空間來(lái)存放一個(gè)Box類對(duì)象,同時(shí)調(diào)用該類的構(gòu)造函數(shù),以使該對(duì)象初始化 在執(zhí)行new運(yùn)算時(shí),如果內(nèi)存量不足,無(wú)法開(kāi)辟所需的內(nèi)存空間,則返回一個(gè)0指針值 用new建立的對(duì)象一般是無(wú)名對(duì)象名,通過(guò)指針訪問(wèn) 在不再需要
7、使用由new建立的對(duì)象時(shí),可以用delete運(yùn)算符予以釋放。如:delete pt; 撤銷了pt指向的對(duì)象,此后程序不能再用該對(duì)象。在執(zhí)行delete運(yùn)算符時(shí),在釋放內(nèi)存空間之前,自動(dòng)調(diào)用析構(gòu)函數(shù),3.4 對(duì)象的動(dòng)態(tài)建立和釋放,3.5 對(duì)象的賦值和復(fù)制,1.對(duì)象的賦值,對(duì)象賦值的一般形式為:對(duì)象名1 = 對(duì)象名2;,對(duì)象復(fù)制:用一個(gè)已有的對(duì)象快速地復(fù)制出多個(gè)完全相同的對(duì)象。如:Box box2(box1); 復(fù)制格式1:類名 對(duì)象2(對(duì)象1); /用對(duì)象1復(fù)制出對(duì)象2 復(fù)制格式2: 類名 對(duì)象名2 = 對(duì)象名1; 在建立對(duì)象2時(shí)調(diào)用一個(gè)特殊的構(gòu)造函數(shù)復(fù)制構(gòu)造函數(shù)(copy constructo
8、r)。該函數(shù)的缺省形式為: Box:Box(const Box 復(fù)制構(gòu)造函數(shù)只有一個(gè)參數(shù),參數(shù)是本類的對(duì)象 問(wèn)題:(1)對(duì)象的賦值和復(fù)制有區(qū)別嗎? (2)普通構(gòu)造函數(shù)和復(fù)制構(gòu)造函數(shù)的如何重載?,3.5 對(duì)象的賦值和復(fù)制,2.對(duì)象的復(fù)制,需要克隆對(duì)象的3種情況 程序中需要新建立一個(gè)對(duì)象,并用另一個(gè)同類的對(duì)象對(duì)它初始化 當(dāng)函數(shù)的參數(shù)為類的對(duì)象時(shí)。在調(diào)用函數(shù)時(shí)需要將實(shí)參對(duì)象完整地傳遞給形參,也就是需要建立一個(gè)實(shí)參的拷貝,按實(shí)參復(fù)制一個(gè)形參,系統(tǒng)是通過(guò)調(diào)用復(fù)制構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)的,這樣能保證形參具有和實(shí)參完全相同的值。例如void fun(Box b) /形參是類的對(duì)象 int main( ) Box b
9、ox1(12,15,18); fun(box1); /實(shí)參是類的對(duì)象,調(diào)用函數(shù)時(shí)將復(fù)制新對(duì)象b return 0; 函數(shù)的返回值是類的對(duì)象。在函數(shù)調(diào)用完畢將返回值帶回函數(shù)調(diào)用處時(shí)。此時(shí)需要將函數(shù)中的對(duì)象復(fù)制一個(gè)臨時(shí)對(duì)象并傳給該函數(shù)的調(diào)用處,3.6 靜態(tài)成員,變量的作用域和生存期,問(wèn)題引入:假設(shè)有一個(gè)學(xué)籍管理軟件,將一個(gè)學(xué)生作為一個(gè)對(duì)象,對(duì)象中“學(xué)號(hào)”數(shù)據(jù)成員,如何實(shí)現(xiàn)每個(gè)對(duì)象中“學(xué)號(hào)”自動(dòng)編號(hào)?,對(duì)象屬性:如果有n個(gè)同類的對(duì)象,那么每一個(gè)對(duì)象都有相同的數(shù)據(jù)成員,不同對(duì)象數(shù)據(jù)成員各不相同 類屬性:描述類的所有對(duì)象共同特征的數(shù)據(jù)項(xiàng),對(duì)任何同類對(duì)象,其屬性值是相同的,即類的靜態(tài)數(shù)據(jù)成員 靜態(tài)數(shù)據(jù)成員
10、的用途是實(shí)現(xiàn)同類多個(gè)對(duì)象之間數(shù)據(jù)共享 例如 class Box public: int volume( ); private: static int height; int length; 希望各對(duì)象中的height值相同,就可以把它定義為靜態(tài)數(shù)據(jù)成員,其值為各對(duì)象所共有,3.6 靜態(tài)成員,1.靜態(tài)數(shù)據(jù)成員,3.6 靜態(tài)成員,溫馨提示 (1)靜態(tài)數(shù)據(jù)成員在內(nèi)存中只占一份空間,且在編譯時(shí)分配。只要在類中定義了靜態(tài)數(shù)據(jù)成員,即使不定義對(duì)象,也為其分配空間 (2)每個(gè)對(duì)象都可引用同類中靜態(tài)數(shù)據(jù)成員。其值對(duì)所有同類對(duì)象都是一樣。如果改變它的值,則在各對(duì)象中這個(gè)數(shù)據(jù)成員的值都同時(shí)改變了 (3)靜態(tài)數(shù)據(jù)成
11、員不隨對(duì)象的建立而分配空間,也不隨對(duì)象的撤銷而釋放,而是在程序結(jié)束時(shí)釋放 (4)靜態(tài)數(shù)據(jù)成員可以初始化,但只能在類體外進(jìn)行初始化。如:int Boxheight=10; 一般形式:數(shù)據(jù)類型類名靜態(tài)數(shù)據(jù)成員名=初值; 注意:不能用參數(shù)初始化表對(duì)靜態(tài)數(shù)據(jù)成員初始化。例:Box(int h,int w,int len):height(h) (5)靜態(tài)數(shù)據(jù)成員初始化時(shí)未賦予初值,則會(huì)自動(dòng)賦予初值0 (6)靜態(tài)數(shù)據(jù)成員既可通過(guò)對(duì)象名或類名來(lái)引用,靜態(tài)數(shù)據(jù)成員初始化時(shí)未賦予初值,則會(huì)自動(dòng)賦予初值0,問(wèn)題 (1)如果靜態(tài)數(shù)據(jù)成員被定義為私有的,是否可以在類外直接引用?如何引用? 答案:不能,通過(guò)公共成員函數(shù)
12、來(lái)引用 (2)類的靜態(tài)數(shù)據(jù)成員的主要作用是什么? 答案:實(shí)現(xiàn)同類對(duì)象之間的數(shù)據(jù)共享 (3)公用靜態(tài)數(shù)據(jù)成員與全局變量的不同? 答案:作用域不同,局限于類的作用域中。而全局變量在整個(gè)程序中,靜態(tài)成員函數(shù):用來(lái)訪問(wèn)靜態(tài)數(shù)據(jù)成員,定義形式:static int volume( ); 調(diào)用方式:靜態(tài)成員函數(shù)是類的一部分。如果要在類外調(diào)用公用的靜態(tài)成員函數(shù),要用類名和域運(yùn)算符“”。如 :Boxvolume( ); 也可通過(guò)對(duì)象名調(diào)用靜態(tài)成員函數(shù),如:a.volume( ); 當(dāng)調(diào)用一個(gè)對(duì)象的成員函數(shù)(非靜態(tài)成員函數(shù))時(shí),系統(tǒng)會(huì)把該對(duì)象的起始地址賦給成員函數(shù)的this指針。而靜態(tài)成員函數(shù)并不屬于某一對(duì)象,
13、它與任何對(duì)象都無(wú)關(guān),靜態(tài)成員函數(shù)沒(méi)有this指針。因此,靜態(tài)與非靜態(tài)成員函數(shù)的根本區(qū)別是: 非靜態(tài)有this指針,而靜態(tài)沒(méi)有this指針。由此決定了靜態(tài)成員函數(shù)不能訪問(wèn)本類中的非靜態(tài)成員,3.6 靜態(tài)成員,2.靜態(tài)成員函數(shù),類成員的類型 公用成員:在類外可以訪問(wèn) 私有成員:只有本類中的函數(shù)可以訪問(wèn) 友元(friend):可以訪問(wèn)與其有好友關(guān)系類中的私有成員,友元包括友元函數(shù)和友元類 友元函數(shù):在本類以外定義了的函數(shù)(該函數(shù)可以是不屬于任何類的非成員函數(shù),或其他類的成員函數(shù))。在類體中用friend對(duì)其進(jìn)行聲明 友元函數(shù)可以訪問(wèn)這個(gè)類中的私有成員 將普通函數(shù)聲明為友元函數(shù) 將另一個(gè)類中的成員函數(shù)
14、聲明為友元函數(shù) 一個(gè)函數(shù)(包括普通函數(shù)和成員函數(shù))可以被多個(gè)類聲明為“朋友”,3.7 友元,1. 將普通函數(shù)聲明為友元函數(shù),2.將某類的成員函數(shù)申明為友元,3. 一個(gè)函數(shù)(普通函數(shù)和成員函數(shù))可被多個(gè)類聲明為“朋友”,友元類:可以將一個(gè)類(例如B類)聲明為另一個(gè)類(例如A類)的“朋友”。這時(shí)B類就是A類的友元類。友元類B中的所有函數(shù)都是A類的友元函數(shù),可以訪問(wèn)A類中的所有成員 聲明友元類的一般形式為:friend 類名; 例如:在A類中聲明B類為其友元類: friend B; 說(shuō)明: (1)友元的關(guān)系是單向的而不是雙向的 (2)友元的關(guān)系不能傳遞,3.7 友元,溫馨提示:如需對(duì)“友元”更多了解
15、,請(qǐng)閱讀C+程序員的婚禮 ,如若干個(gè)類的功能相同,僅僅是數(shù)據(jù)類型不同,則可以聲明一個(gè)通用的類模板 如果說(shuō)類是對(duì)象的抽象,對(duì)象是類的實(shí)例,則類模板是類的抽象,類是類模板的實(shí)例,3.8 類模板,類模板的實(shí)例化:在類模板名之后在尖括號(hào)內(nèi)指定實(shí)際的類型名,在進(jìn)行編譯時(shí),編譯系統(tǒng)就用int取代類模板中的類型參數(shù)numtype,類模板方法總結(jié) (1)寫(xiě)出一個(gè)實(shí)際的類 (2)將此類中準(zhǔn)備改變的類型名(如int要改變?yōu)閒loat或char)改用自己指定 的虛擬類型名(如例中的numtype) (3)在類聲明前面加入一行,格式為: template,如template class Compare 類體; (4)
16、 用類模板定義對(duì)象時(shí)的一般形式: 類模板名 對(duì)象名; 或:類模板名 對(duì)象名(實(shí)參表列); 如:Compare cmp; 或Compare cmp(3,7); (5) 如果在類模板外定義成員函數(shù),應(yīng)寫(xiě)成類模板形式: template 函數(shù)類型 類模板名成員函數(shù)名(形參表列) 函數(shù)體 例:template numtype Comparemax( ) return (xy)?x:y;,本講重點(diǎn)分析,對(duì)象數(shù)組的定義和初始化 對(duì)象的指針、對(duì)象成員的指針、this指針 對(duì)象動(dòng)態(tài)建立和釋放,New 和Delete 對(duì)象的復(fù)制和賦值區(qū)別,復(fù)制構(gòu)造函數(shù) 類靜態(tài)數(shù)據(jù)成員定義、作用和訪問(wèn)方式;靜態(tài)成員函數(shù)的定義和作用 類的友元函數(shù),友元類,第3次實(shí)驗(yàn)作業(yè),本次練習(xí)3道題,提交方式同前面,第5周末之前交。 1.建立一個(gè)對(duì)象數(shù)組,內(nèi)放5個(gè)學(xué)生的數(shù)據(jù)(學(xué)號(hào)、成績(jī)),建立一個(gè)函數(shù)max,用指向?qū)ο蟮闹羔樧龊瘮?shù)參數(shù),在max函數(shù)中找出5個(gè)學(xué)生中成績(jī)最高者,并輸出其學(xué)號(hào)(見(jiàn)P311.第5題) 2. 定義Boat與Car兩個(gè)類,兩者都有weight成員,并為每個(gè)類設(shè)計(jì)構(gòu)造函數(shù)(可賦初值也可以不賦初值),設(shè)置新值函數(shù)set, 打印成員值函數(shù)print。再定義二者的一個(gè)友元函數(shù)totalWeight(Boat B, Car C),計(jì)算B、C兩者的重量和 3. 犀利哥看
溫馨提示
- 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ù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 項(xiàng)目工程師培訓(xùn)課件
- 油田開(kāi)發(fā)項(xiàng)目建議書(shū)(參考)
- 2025年壓力表合作協(xié)議書(shū)
- 2025年智能分揀系統(tǒng)項(xiàng)目發(fā)展計(jì)劃
- 2025年預(yù)防用生物制品項(xiàng)目發(fā)展計(jì)劃
- 五年級(jí)上冊(cè)數(shù)學(xué)教案 第七單元
- 2025年慣性組合項(xiàng)目合作計(jì)劃書(shū)
- 2025年商業(yè)照明燈具項(xiàng)目發(fā)展計(jì)劃
- 2025年輕質(zhì)建筑材料及制品合作協(xié)議書(shū)
- 2025年中高壓陰極電容鋁箔合作協(xié)議書(shū)
- 2025年錨栓市場(chǎng)發(fā)展現(xiàn)狀
- 養(yǎng)豬場(chǎng)建設(shè)項(xiàng)目可行性研究報(bào)告(模板范文)
- 2025年四級(jí)中式烹調(diào)師(中級(jí))職業(yè)技能鑒定參考試題庫(kù)(含答案)
- 夜間作業(yè)安全培訓(xùn)培訓(xùn)資料
- 中藥知識(shí)講解課件
- 施工資源需求計(jì)劃與調(diào)配策略
- 預(yù)制箱梁首件工程施工總結(jié)
- 2024-2025學(xué)年人教版高二化學(xué)選擇性必修3配套課件 基礎(chǔ)課時(shí)4 有機(jī)物分子式和分子結(jié)構(gòu)的確定
- 湖南省岳陽(yáng)市2024-2025學(xué)年小升初模擬數(shù)學(xué)測(cè)試卷含解析
- 寵物店店員的工作職責(zé)與服務(wù)理念
- 高中家長(zhǎng)會(huì) 高一下學(xué)期期末家長(zhǎng)會(huì)課件
評(píng)論
0/150
提交評(píng)論