《C++與面向?qū)ο蟆返?章(人民郵電出版社)_第1頁(yè)
《C++與面向?qū)ο蟆返?章(人民郵電出版社)_第2頁(yè)
《C++與面向?qū)ο蟆返?章(人民郵電出版社)_第3頁(yè)
《C++與面向?qū)ο蟆返?章(人民郵電出版社)_第4頁(yè)
《C++與面向?qū)ο蟆返?章(人民郵電出版社)_第5頁(yè)
已閱讀5頁(yè),還剩22頁(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)介

面向?qū)ο蟪绦蛟O(shè)計(jì)及C++

主講:第4章類(lèi)中數(shù)據(jù)的共享與保護(hù)面向?qū)ο蟪绦蛟O(shè)計(jì)及C++本章作業(yè)作業(yè)本:本章習(xí)題:一、二〔1、3〕、三、四〔1、3〕10:40本章內(nèi)容提要4.1靜態(tài)成員4.2共享數(shù)據(jù)的保護(hù)4.3程序?qū)嵗?----學(xué)生信息管理系統(tǒng)本章小結(jié)10:404.1靜態(tài)成員在類(lèi)的定義中,可以用關(guān)鍵字static聲明成員為靜態(tài)的,這些靜態(tài)成員可以在同一個(gè)類(lèi)的不同對(duì)象之間提供數(shù)據(jù)共享。不管這個(gè)類(lèi)創(chuàng)立了多少個(gè)對(duì)象,但靜態(tài)成員只有一個(gè)拷貝〔副本〕,被所有屬于這個(gè)類(lèi)的對(duì)象共享。靜態(tài)成員包括靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)10:404.1.1靜態(tài)數(shù)據(jù)成員靜態(tài)數(shù)據(jù)成員是解決同一個(gè)類(lèi)的不同對(duì)象之間數(shù)據(jù)共享問(wèn)題,同一個(gè)類(lèi)所有的對(duì)象共享此成員,該成員只有一份拷貝

靜態(tài)數(shù)據(jù)成員的聲明形式為:

static類(lèi)型名靜態(tài)數(shù)據(jù)成員名;靜態(tài)數(shù)據(jù)成員的初始化必須在類(lèi)外進(jìn)行,默認(rèn)值為0,形式為:

類(lèi)型名類(lèi)名::靜態(tài)數(shù)據(jù)成員名=初值;注意:前面不能再加static10:404.1.1靜態(tài)數(shù)據(jù)成員公有的靜態(tài)數(shù)據(jù)成員可以在對(duì)象定義之前被訪問(wèn),形式為:類(lèi)名::公有靜態(tài)成員變量名;在對(duì)象定義后還可以通過(guò)對(duì)象進(jìn)行訪問(wèn),形式為:對(duì)象名.公有靜態(tài)成員變量名私有的靜態(tài)數(shù)據(jù)成員不能被類(lèi)的外部函數(shù)訪問(wèn),也不能用對(duì)象直接進(jìn)行訪問(wèn)。10:404.1.1靜態(tài)數(shù)據(jù)成員程序4.1請(qǐng)?jiān)诰幊汰h(huán)境下直接運(yùn)行演示特別注意:(1)類(lèi)內(nèi)的語(yǔ)句staticinttotal;用來(lái)定義一個(gè)公有的靜態(tài)數(shù)據(jù)成員total(2)類(lèi)體外語(yǔ)句:intStudent::total=0;用來(lái)初始化靜態(tài)數(shù)據(jù)成員(3)兩個(gè)構(gòu)造函數(shù)中均有total++;語(yǔ)句(4)析構(gòu)函數(shù)中有total--;語(yǔ)句10:404.1.1靜態(tài)數(shù)據(jù)成員主函數(shù)中訪問(wèn)total的多種方式:(1)Student::total,對(duì)公有的靜態(tài)數(shù)據(jù)成員,無(wú)論是否認(rèn)義對(duì)象均可用此形式訪問(wèn)(2)當(dāng)用指針p申請(qǐng)了動(dòng)態(tài)對(duì)象空間之后,可以用p->total即(*p).total形式訪問(wèn)(3)s[0].total和s[1].total均表達(dá)為通過(guò)對(duì)象來(lái)訪問(wèn)此靜態(tài)數(shù)據(jù)成員(4)思考:將staticinttotal;移動(dòng)到private:的下方作為私有成員,重新編譯程序觀察結(jié)果并解釋原因10:404.1.2靜態(tài)成員函數(shù)為什么要有靜態(tài)成員函數(shù)?(1)如果靜態(tài)數(shù)據(jù)成員不是公有成員,那么無(wú)法直接用類(lèi)名或?qū)ο竺麃?lái)訪問(wèn),這時(shí),必定要借助于類(lèi)的公有成員函數(shù)來(lái)間接訪問(wèn)。由于靜態(tài)數(shù)據(jù)成員是整個(gè)類(lèi)公有的,不屬于任何對(duì)象,因此希望公有成員函數(shù)對(duì)靜態(tài)數(shù)據(jù)成員的訪問(wèn)也不必依賴(lài)對(duì)象,可以通過(guò)類(lèi)名來(lái)訪問(wèn),普通成員函數(shù)無(wú)法滿足這一要求因此需要將專(zhuān)門(mén)用來(lái)訪問(wèn)非公有靜態(tài)數(shù)據(jù)成員的函數(shù)定義為靜態(tài)成員函數(shù)10:404.1.2靜態(tài)成員函數(shù)靜態(tài)成員函數(shù)在類(lèi)內(nèi)的原型聲明形式:static返回值類(lèi)型靜態(tài)成員函數(shù)名〔形式參數(shù)表〕;聲明為static的成員函數(shù)在類(lèi)的范圍內(nèi)共享,它屬于該類(lèi)的所有對(duì)象,只能直接訪問(wèn)靜態(tài)數(shù)據(jù)成員,不能對(duì)類(lèi)的其他類(lèi)型的數(shù)據(jù)成員或成員函數(shù)進(jìn)行訪問(wèn)??梢酝ㄟ^(guò)類(lèi)名或?qū)ο竺M(jìn)行調(diào)用,形式如下:類(lèi)名::靜態(tài)成員函數(shù)名〔實(shí)際參數(shù)表〕;或?qū)ο竺?靜態(tài)成員函數(shù)名〔實(shí)際參數(shù)表〕;10:404.1.2靜態(tài)成員函數(shù)程序4.2請(qǐng)?jiān)诰幊汰h(huán)境下直接運(yùn)行演示特別注意:(1)類(lèi)內(nèi)的語(yǔ)句staticinttotal;放在prirate:下,用來(lái)定義一個(gè)私有的靜態(tài)數(shù)據(jù)成員(2)類(lèi)體內(nèi)的staticvoidPrint();用來(lái)聲明一個(gè)公有的靜態(tài)成員函數(shù)(3)主函數(shù)中調(diào)用該靜態(tài)成員函數(shù)來(lái)間接訪問(wèn)私有屬性的靜態(tài)數(shù)據(jù)成員:

Student::Print();p->Print();s[0].Print(); s[1].Print();

10:404.1.2靜態(tài)成員函數(shù)特別說(shuō)明:(1)靜態(tài)成員函數(shù)與普通的成員函數(shù)不同,無(wú)this指針(2)靜態(tài)成員函數(shù)幾乎是專(zhuān)門(mén)為方便操作非公有屬性的靜態(tài)數(shù)據(jù)成員而設(shè)的(3)一般不用來(lái)訪問(wèn)非靜態(tài)成員返回10:404.2共享數(shù)據(jù)的保護(hù)為解決數(shù)據(jù)共享與數(shù)據(jù)平安的統(tǒng)一,C++語(yǔ)言通過(guò)適時(shí)地巧用關(guān)鍵字const,對(duì)相應(yīng)的數(shù)據(jù)進(jìn)行保護(hù)。主要有3種用法:(1)常數(shù)據(jù)成員:類(lèi)內(nèi)的某一數(shù)據(jù)成員不能被修改(2)常成員函數(shù):類(lèi)的成員函數(shù)只能訪問(wèn)類(lèi)內(nèi)的其他成員而不允許修改(3)常對(duì)象:整個(gè)對(duì)象不能被修改10:404.2.1常數(shù)據(jù)成員類(lèi)中需要用到常量,定義為全局常量顯然不利于代碼移植因此,在類(lèi)中通過(guò)定義常數(shù)據(jù)成員,僅在本類(lèi)中起作用,方便了類(lèi)的移植。常數(shù)據(jù)成員在類(lèi)內(nèi)的定義形式為:const類(lèi)型名常數(shù)據(jù)成員名;常數(shù)據(jù)成員的初始化只能在構(gòu)造函數(shù)的初始化列表中進(jìn)行,形式為:構(gòu)造函數(shù)首部:常數(shù)據(jù)成員名〔用來(lái)初始化的常量或常量表達(dá)式〕10:404.2.1常數(shù)據(jù)成員【例4.3】常數(shù)據(jù)成員的初始化及訪問(wèn)例如,定義圓類(lèi)Circle,其中定義一個(gè)常數(shù)據(jù)成員PI表示圓周率,類(lèi)中定義函數(shù)實(shí)現(xiàn)求圓的面積及周長(zhǎng)。該例由3個(gè)文件組成,注意文件包含的正確使用.請(qǐng)?jiān)诰幊汰h(huán)境下運(yùn)行該程序,注意多文件結(jié)構(gòu)的程序的定義方法.本程序中請(qǐng)?zhí)貏e關(guān)注第一個(gè)文件中:(1)constdoublePI;定義常數(shù)據(jù)成員PI表圓周率(2)構(gòu)造函數(shù)首部用初始化列表初始常數(shù)據(jù)成員:Circle(doubler=0):PI(3.1415926)10:404.2.1常數(shù)據(jù)成員例4.3中類(lèi)Circle的常數(shù)據(jù)成員PI,與普通成員相比不可被修改。但它與普通數(shù)據(jù)成員有一個(gè)共性——都是跟著對(duì)象走的,每個(gè)對(duì)象中都保存有一份PI的拷貝,造成了數(shù)據(jù)冗余。改進(jìn)方式:將PI定義為靜態(tài)常數(shù)據(jù)成員。修改方法:(1)在example4_03_Circle..h頭文件中將constdoublePI;修改為:staticconstdoublePI;(2)在example4_03_Circle.cpp文件中增加一條語(yǔ)句:constdoubleCircle::PI=3.1415926;10:404.2.2常成員函數(shù)如果一個(gè)成員函數(shù)對(duì)類(lèi)中數(shù)據(jù)成員只作訪問(wèn)而不作直接或間接的修改,那么最好將此成員函數(shù)說(shuō)明為常成員函數(shù),以明確表示它對(duì)數(shù)據(jù)成員的保護(hù)性。常成員函數(shù)的原型聲明格式如下:類(lèi)型

函數(shù)名〔形式參數(shù)表〕

const;說(shuō)明:這里的const是函數(shù)類(lèi)型的一個(gè)組成局部,故原型聲明和定義首部都必須要有,并且可以作為函數(shù)重載的標(biāo)志10:404.2.2常成員函數(shù)常成員函數(shù)一般不調(diào)用普通函數(shù),以防止間接修改數(shù)據(jù)成員的值反之,普通函數(shù)可以調(diào)用常成員函數(shù)【例4.4】常成員函數(shù)的定義及調(diào)用例如。在例4.3的根底上作修改。請(qǐng)直接在編程環(huán)境下運(yùn)行,注意與4.3的區(qū)別在頭文件中增加了:doubleGetRadius()const;在對(duì)應(yīng)實(shí)現(xiàn)文件中增加了以上常成員函數(shù)實(shí)現(xiàn)代碼在主函數(shù)中增加了對(duì)該函數(shù)的調(diào)用10:40對(duì)象在其整個(gè)生存期內(nèi)都不能被改變,這時(shí),需要將對(duì)象說(shuō)明為常對(duì)象。常對(duì)象的所有數(shù)據(jù)成員的值在整個(gè)生存期內(nèi)不能被更新。常對(duì)象的說(shuō)明格式如下:類(lèi)名

const

對(duì)象名;或const

類(lèi)名

對(duì)象名;定義常對(duì)象時(shí)必須進(jìn)行初始化,而且其對(duì)象的數(shù)據(jù)成員值不能修改。常對(duì)象只能調(diào)用它的常成員函數(shù)而不能調(diào)用普通的成員函數(shù)4.2.3常對(duì)象10:40【例4.5】常對(duì)象與常成員函數(shù)的應(yīng)用例如。定義一個(gè)Person類(lèi),分別定義該類(lèi)的常對(duì)象和普通對(duì)象,注意重載的Print()函數(shù)的調(diào)用情況。請(qǐng)?jiān)诰幊汰h(huán)境下直接運(yùn)行程序注意幾個(gè)問(wèn)題:(1)類(lèi)中有一對(duì)重載的函數(shù):voidPrint(); //普通成員函數(shù)voidPrint()const;//常成員函數(shù)4.2.3常對(duì)象10:40(2)主函數(shù)中的p1為常對(duì)象,p2為普通對(duì)象,調(diào)用print()函數(shù)時(shí),注意各自調(diào)用的版本(3)思考:分別將普通成員函數(shù)print或靜態(tài)成員函數(shù)print刪除掉,再重新編譯鏈接運(yùn)行程序,觀察結(jié)果并解釋原因4.2.3常對(duì)象返回10:40請(qǐng)?jiān)诰幊汰h(huán)境下運(yùn)行完整的程序.在第3章的根底上,作以下一些修改:〔1〕為統(tǒng)計(jì)真正在效的學(xué)生人數(shù),將原來(lái)的全局變量count改為定義在類(lèi)Student中的靜態(tài)數(shù)據(jù)成員,并且設(shè)為私有屬性以表達(dá)信息隱藏的特性?!?〕為訪問(wèn)count,特別增加了靜態(tài)成員函數(shù) staticintGetCount();〔3〕將某些成員函數(shù),不改變數(shù)據(jù)成員值的改成常成員函數(shù),例如:GetName、GetAge和Display函數(shù)。還有一些函數(shù)內(nèi)部的形式參數(shù),必要時(shí)加了const以保護(hù)對(duì)應(yīng)實(shí)參。4.3程序?qū)嵗獙W(xué)生信息管理系統(tǒng)10:40〔4〕類(lèi)中增加了兩個(gè)成員函數(shù):Insert()和Delete(),效勞于后面新增加的插入和刪除功能?!?〕主函數(shù)中增加了兩個(gè)功能:插入和刪除一條學(xué)生記錄,因此菜單上增加了兩個(gè)條目。在流程控制中增加兩個(gè)分支?!?〕由于此程序中的刪除只是簡(jiǎn)單地將age成員修改為0,也就是說(shuō),只要age成員值為0,那么認(rèn)為此元素位置上的元素值是無(wú)效的,可能是隨機(jī)值,也有可能是曾經(jīng)被刪除的,因此在OutputStu()數(shù)中控制輸出所有有效元素時(shí)的循環(huán)控制條件與第三章中不同,同時(shí)輸出學(xué)生總?cè)藬?shù)的時(shí)候也與原來(lái)不同,涉及到靜態(tài)成員函數(shù)的訪問(wèn),讀者需要注意比照。4.3程序?qū)嵗獙W(xué)生信息管理系統(tǒng)10:40〔7〕與〔6〕同樣的考慮,函數(shù)SearchStu()的實(shí)現(xiàn)也與第三章中不同,循環(huán)控制條件需要修改,在比照名字字符串之前,必須先確認(rèn)該記錄是否有效,即判斷年齡是否為0。在第三章中不涉及插入刪除,所以記錄的從0下標(biāo)依次存放的,讀者需要注意比照?!?〕插入和刪除函數(shù)中分別考慮了是否滿和是否空的邊界條件。4.3程序?qū)嵗獙W(xué)生信息管理系統(tǒng)返回10:40本章小結(jié)本章介紹同類(lèi)對(duì)象間數(shù)據(jù)共享與保護(hù)相關(guān)的問(wèn)題,主要知識(shí)點(diǎn)如下:〔1〕靜態(tài)數(shù)據(jù)成員是為所有同類(lèi)對(duì)象共享,必須在類(lèi)外進(jìn)行初始化。對(duì)于公有靜態(tài)數(shù)據(jù)成員,可以通過(guò)類(lèi)名或?qū)ο竺苯诱{(diào)用;對(duì)于私有靜態(tài)數(shù)據(jù)成員,那么需要通過(guò)成員函數(shù)間接訪問(wèn)。〔2〕靜態(tài)成員函數(shù)一般專(zhuān)門(mén)用來(lái)操作靜態(tài)數(shù)據(jù)成員,它也是可以通過(guò)類(lèi)名或?qū)ο竺麃?lái)調(diào)用,靜態(tài)成員函數(shù)與一般成員函數(shù)相比,最大的區(qū)別是它沒(méi)有this

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論