




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(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ú)法滿(mǎn)足這一要求因此需要將專(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)依次存放的,讀者需要注意比照。〔8〕插入和刪除函數(shù)中分別考慮了是否滿(mǎn)和是否空的邊界條件。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)?!?〕靜態(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)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 家務(wù)服務(wù)員2023練習(xí)試卷附答案
- 2025年每年中考試題及答案
- 工業(yè)機(jī)器人1+x練習(xí)試卷附答案
- 2025年自然地理試題及答案
- 2025年期末主題班會(huì)標(biāo)準(zhǔn)教案
- 2025年湘江醫(yī)院面試試題及答案
- 2025年旅游大數(shù)據(jù)考試題及答案
- 2025年酒店主管考核試題及答案
- 2025年運(yùn)營(yíng)招聘測(cè)試題及答案
- 2025年監(jiān)獄囚犯考試試題及答案
- 《電氣基礎(chǔ)知識(shí)培訓(xùn)》課件
- 自考15040習(xí)新時(shí)代思想概論高頻備考復(fù)習(xí)重點(diǎn)
- 2024年河南省新鄉(xiāng)市中考數(shù)學(xué)一模試卷
- 《工程建設(shè)標(biāo)準(zhǔn)強(qiáng)制性條文電力工程部分2023年版》
- TCALC 003-2023 手術(shù)室患者人文關(guān)懷管理規(guī)范
- 2024春蘇教版《亮點(diǎn)給力大試卷》 數(shù)學(xué)四年級(jí)下冊(cè)(全冊(cè)有答案)
- 群面試的面試技巧
- 體育課(軍體拳)教案(共43頁(yè))
- 市場(chǎng)營(yíng)銷(xiāo)費(fèi)用核銷(xiāo)管理制度(共4頁(yè))
- 安徽省第八屆“徽匠”建筑技能大賽砌筑工實(shí)操比賽試題
- 第一節(jié)鏵式犁的基本構(gòu)造和類(lèi)型
評(píng)論
0/150
提交評(píng)論