版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
面向?qū)ο蟪绦蛟O(shè)計及C++
主講:第4章類中數(shù)據(jù)的共享與保護面向?qū)ο蟪绦蛟O(shè)計及C++本章作業(yè)作業(yè)本:本章習(xí)題:一、二〔1、3〕、三、四〔1、3〕10:40本章內(nèi)容提要4.1靜態(tài)成員4.2共享數(shù)據(jù)的保護4.3程序?qū)嵗?----學(xué)生信息管理系統(tǒng)本章小結(jié)10:404.1靜態(tài)成員在類的定義中,可以用關(guān)鍵字static聲明成員為靜態(tài)的,這些靜態(tài)成員可以在同一個類的不同對象之間提供數(shù)據(jù)共享。不管這個類創(chuàng)立了多少個對象,但靜態(tài)成員只有一個拷貝〔副本〕,被所有屬于這個類的對象共享。靜態(tài)成員包括靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)10:404.1.1靜態(tài)數(shù)據(jù)成員靜態(tài)數(shù)據(jù)成員是解決同一個類的不同對象之間數(shù)據(jù)共享問題,同一個類所有的對象共享此成員,該成員只有一份拷貝
靜態(tài)數(shù)據(jù)成員的聲明形式為:
static類型名靜態(tài)數(shù)據(jù)成員名;靜態(tài)數(shù)據(jù)成員的初始化必須在類外進行,默認(rèn)值為0,形式為:
類型名類名::靜態(tài)數(shù)據(jù)成員名=初值;注意:前面不能再加static10:404.1.1靜態(tài)數(shù)據(jù)成員公有的靜態(tài)數(shù)據(jù)成員可以在對象定義之前被訪問,形式為:類名::公有靜態(tài)成員變量名;在對象定義后還可以通過對象進行訪問,形式為:對象名.公有靜態(tài)成員變量名私有的靜態(tài)數(shù)據(jù)成員不能被類的外部函數(shù)訪問,也不能用對象直接進行訪問。10:404.1.1靜態(tài)數(shù)據(jù)成員程序4.1請在編程環(huán)境下直接運行演示特別注意:(1)類內(nèi)的語句staticinttotal;用來定義一個公有的靜態(tài)數(shù)據(jù)成員total(2)類體外語句:intStudent::total=0;用來初始化靜態(tài)數(shù)據(jù)成員(3)兩個構(gòu)造函數(shù)中均有total++;語句(4)析構(gòu)函數(shù)中有total--;語句10:404.1.1靜態(tài)數(shù)據(jù)成員主函數(shù)中訪問total的多種方式:(1)Student::total,對公有的靜態(tài)數(shù)據(jù)成員,無論是否認(rèn)義對象均可用此形式訪問(2)當(dāng)用指針p申請了動態(tài)對象空間之后,可以用p->total即(*p).total形式訪問(3)s[0].total和s[1].total均表達(dá)為通過對象來訪問此靜態(tài)數(shù)據(jù)成員(4)思考:將staticinttotal;移動到private:的下方作為私有成員,重新編譯程序觀察結(jié)果并解釋原因10:404.1.2靜態(tài)成員函數(shù)為什么要有靜態(tài)成員函數(shù)?(1)如果靜態(tài)數(shù)據(jù)成員不是公有成員,那么無法直接用類名或?qū)ο竺麃碓L問,這時,必定要借助于類的公有成員函數(shù)來間接訪問。由于靜態(tài)數(shù)據(jù)成員是整個類公有的,不屬于任何對象,因此希望公有成員函數(shù)對靜態(tài)數(shù)據(jù)成員的訪問也不必依賴對象,可以通過類名來訪問,普通成員函數(shù)無法滿足這一要求因此需要將專門用來訪問非公有靜態(tài)數(shù)據(jù)成員的函數(shù)定義為靜態(tài)成員函數(shù)10:404.1.2靜態(tài)成員函數(shù)靜態(tài)成員函數(shù)在類內(nèi)的原型聲明形式:static返回值類型靜態(tài)成員函數(shù)名〔形式參數(shù)表〕;聲明為static的成員函數(shù)在類的范圍內(nèi)共享,它屬于該類的所有對象,只能直接訪問靜態(tài)數(shù)據(jù)成員,不能對類的其他類型的數(shù)據(jù)成員或成員函數(shù)進行訪問??梢酝ㄟ^類名或?qū)ο竺M行調(diào)用,形式如下:類名::靜態(tài)成員函數(shù)名〔實際參數(shù)表〕;或?qū)ο竺?靜態(tài)成員函數(shù)名〔實際參數(shù)表〕;10:404.1.2靜態(tài)成員函數(shù)程序4.2請在編程環(huán)境下直接運行演示特別注意:(1)類內(nèi)的語句staticinttotal;放在prirate:下,用來定義一個私有的靜態(tài)數(shù)據(jù)成員(2)類體內(nèi)的staticvoidPrint();用來聲明一個公有的靜態(tài)成員函數(shù)(3)主函數(shù)中調(diào)用該靜態(tài)成員函數(shù)來間接訪問私有屬性的靜態(tài)數(shù)據(jù)成員:
Student::Print();p->Print();s[0].Print(); s[1].Print();
10:404.1.2靜態(tài)成員函數(shù)特別說明:(1)靜態(tài)成員函數(shù)與普通的成員函數(shù)不同,無this指針(2)靜態(tài)成員函數(shù)幾乎是專門為方便操作非公有屬性的靜態(tài)數(shù)據(jù)成員而設(shè)的(3)一般不用來訪問非靜態(tài)成員返回10:404.2共享數(shù)據(jù)的保護為解決數(shù)據(jù)共享與數(shù)據(jù)平安的統(tǒng)一,C++語言通過適時地巧用關(guān)鍵字const,對相應(yīng)的數(shù)據(jù)進行保護。主要有3種用法:(1)常數(shù)據(jù)成員:類內(nèi)的某一數(shù)據(jù)成員不能被修改(2)常成員函數(shù):類的成員函數(shù)只能訪問類內(nèi)的其他成員而不允許修改(3)常對象:整個對象不能被修改10:404.2.1常數(shù)據(jù)成員類中需要用到常量,定義為全局常量顯然不利于代碼移植因此,在類中通過定義常數(shù)據(jù)成員,僅在本類中起作用,方便了類的移植。常數(shù)據(jù)成員在類內(nèi)的定義形式為:const類型名常數(shù)據(jù)成員名;常數(shù)據(jù)成員的初始化只能在構(gòu)造函數(shù)的初始化列表中進行,形式為:構(gòu)造函數(shù)首部:常數(shù)據(jù)成員名〔用來初始化的常量或常量表達(dá)式〕10:404.2.1常數(shù)據(jù)成員【例4.3】常數(shù)據(jù)成員的初始化及訪問例如,定義圓類Circle,其中定義一個常數(shù)據(jù)成員PI表示圓周率,類中定義函數(shù)實現(xiàn)求圓的面積及周長。該例由3個文件組成,注意文件包含的正確使用.請在編程環(huán)境下運行該程序,注意多文件結(jié)構(gòu)的程序的定義方法.本程序中請?zhí)貏e關(guān)注第一個文件中:(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中類Circle的常數(shù)據(jù)成員PI,與普通成員相比不可被修改。但它與普通數(shù)據(jù)成員有一個共性——都是跟著對象走的,每個對象中都保存有一份PI的拷貝,造成了數(shù)據(jù)冗余。改進方式:將PI定義為靜態(tài)常數(shù)據(jù)成員。修改方法:(1)在example4_03_Circle..h頭文件中將constdoublePI;修改為:staticconstdoublePI;(2)在example4_03_Circle.cpp文件中增加一條語句:constdoubleCircle::PI=3.1415926;10:404.2.2常成員函數(shù)如果一個成員函數(shù)對類中數(shù)據(jù)成員只作訪問而不作直接或間接的修改,那么最好將此成員函數(shù)說明為常成員函數(shù),以明確表示它對數(shù)據(jù)成員的保護性。常成員函數(shù)的原型聲明格式如下:類型
函數(shù)名〔形式參數(shù)表〕
const;說明:這里的const是函數(shù)類型的一個組成局部,故原型聲明和定義首部都必須要有,并且可以作為函數(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的根底上作修改。請直接在編程環(huán)境下運行,注意與4.3的區(qū)別在頭文件中增加了:doubleGetRadius()const;在對應(yīng)實現(xiàn)文件中增加了以上常成員函數(shù)實現(xiàn)代碼在主函數(shù)中增加了對該函數(shù)的調(diào)用10:40對象在其整個生存期內(nèi)都不能被改變,這時,需要將對象說明為常對象。常對象的所有數(shù)據(jù)成員的值在整個生存期內(nèi)不能被更新。常對象的說明格式如下:類名
const
對象名;或const
類名
對象名;定義常對象時必須進行初始化,而且其對象的數(shù)據(jù)成員值不能修改。常對象只能調(diào)用它的常成員函數(shù)而不能調(diào)用普通的成員函數(shù)4.2.3常對象10:40【例4.5】常對象與常成員函數(shù)的應(yīng)用例如。定義一個Person類,分別定義該類的常對象和普通對象,注意重載的Print()函數(shù)的調(diào)用情況。請在編程環(huán)境下直接運行程序注意幾個問題:(1)類中有一對重載的函數(shù):voidPrint(); //普通成員函數(shù)voidPrint()const;//常成員函數(shù)4.2.3常對象10:40(2)主函數(shù)中的p1為常對象,p2為普通對象,調(diào)用print()函數(shù)時,注意各自調(diào)用的版本(3)思考:分別將普通成員函數(shù)print或靜態(tài)成員函數(shù)print刪除掉,再重新編譯鏈接運行程序,觀察結(jié)果并解釋原因4.2.3常對象返回10:40請在編程環(huán)境下運行完整的程序.在第3章的根底上,作以下一些修改:〔1〕為統(tǒng)計真正在效的學(xué)生人數(shù),將原來的全局變量count改為定義在類Student中的靜態(tài)數(shù)據(jù)成員,并且設(shè)為私有屬性以表達(dá)信息隱藏的特性?!?〕為訪問count,特別增加了靜態(tài)成員函數(shù) staticintGetCount();〔3〕將某些成員函數(shù),不改變數(shù)據(jù)成員值的改成常成員函數(shù),例如:GetName、GetAge和Display函數(shù)。還有一些函數(shù)內(nèi)部的形式參數(shù),必要時加了const以保護對應(yīng)實參。4.3程序?qū)嵗獙W(xué)生信息管理系統(tǒng)10:40〔4〕類中增加了兩個成員函數(shù):Insert()和Delete(),效勞于后面新增加的插入和刪除功能?!?〕主函數(shù)中增加了兩個功能:插入和刪除一條學(xué)生記錄,因此菜單上增加了兩個條目。在流程控制中增加兩個分支?!?〕由于此程序中的刪除只是簡單地將age成員修改為0,也就是說,只要age成員值為0,那么認(rèn)為此元素位置上的元素值是無效的,可能是隨機值,也有可能是曾經(jīng)被刪除的,因此在OutputStu()數(shù)中控制輸出所有有效元素時的循環(huán)控制條件與第三章中不同,同時輸出學(xué)生總?cè)藬?shù)的時候也與原來不同,涉及到靜態(tài)成員函數(shù)的訪問,讀者需要注意比照。4.3程序?qū)嵗獙W(xué)生信息管理系統(tǒng)10:40〔7〕與〔6〕同樣的考慮,函數(shù)SearchStu()的實現(xiàn)也與第三章中不同,循環(huán)控制條件需要修改,在比照名字字符串之前,必須先確認(rèn)該記錄是否有效,即判斷年齡是否為0。在第三章中不涉及插入刪除,所以記錄的從0下標(biāo)依次存放的,讀者需要注意比照?!?〕插入和刪除函數(shù)中分別考慮了是否滿和是否空的邊界條件。4.3程序?qū)嵗獙W(xué)生信息管理系統(tǒng)返回10:40本章小結(jié)本章介紹同類對象間數(shù)據(jù)共享與保護相關(guān)的問題,主要知識點如下:〔1〕靜態(tài)數(shù)據(jù)成員是為所有同類對象共享,必須在類外進行初始化。對于公有靜態(tài)數(shù)據(jù)成員,可以通過類名或?qū)ο竺苯诱{(diào)用;對于私有靜態(tài)數(shù)據(jù)成員,那么需要通過成員函數(shù)間接訪問。〔2〕靜態(tài)成員函數(shù)一般專門用來操作靜態(tài)數(shù)據(jù)成員,它也是可以通過類名或?qū)ο竺麃碚{(diào)用,靜態(tài)成員函數(shù)與一般成員函數(shù)相比,最大的區(qū)別是它沒有this
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度烏依離婚后遺產(chǎn)管理及分配合同3篇
- 2024年度染整用紗線批量采購合同2篇
- 2024商鋪轉(zhuǎn)讓中租賃權(quán)及使用權(quán)轉(zhuǎn)讓合同模板3篇
- 2024年度國際知識產(chǎn)權(quán)保護合同保護范圍與實施措施2篇
- 2024年全新智能設(shè)備軟件代理銷售合作框架協(xié)議3篇
- 2024年度現(xiàn)代農(nóng)業(yè)土地開發(fā)與耕作合作協(xié)議3篇
- 2024年度股權(quán)投資合同:風(fēng)險投資公司股權(quán)投資協(xié)議3篇
- 2024年二手車置換服務(wù)合同3篇
- 2024年度成都城市公共服務(wù)外包合同2篇
- 2024版醫(yī)療設(shè)備有限公司股權(quán)轉(zhuǎn)讓協(xié)議2篇
- 2024年考研政治試題及詳細(xì)解析
- 征兵工作試題
- 情緒調(diào)試-再見emo你好+Emotion+高一下學(xué)期心理健康教育課(通用版)
- TCALC 003-2023 手術(shù)室患者人文關(guān)懷管理規(guī)范
- 北京市西城區(qū)2023-2024學(xué)年七年級上學(xué)期期末地理試卷
- 建設(shè)工程安全風(fēng)險管理
- 臨水臨電施工組織方案
- 國網(wǎng)安全生產(chǎn)培訓(xùn)課件
- 木材的分類和命名規(guī)則
- 班會:拓展學(xué)生的興趣愛好課件
- 學(xué)?!敖景藗€一”臺賬目錄
評論
0/150
提交評論