




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
靜態(tài)成員與友元本節(jié)課將介紹靜態(tài)成員和友元函數(shù)的概念,并探討它們在C++編程中的應(yīng)用。課程導(dǎo)入課程目標(biāo)理解靜態(tài)成員和友元函數(shù)的概念。掌握靜態(tài)成員和友元函數(shù)的聲明、定義和使用方式。能夠利用靜態(tài)成員和友元函數(shù)解決實(shí)際問題。學(xué)習(xí)要點(diǎn)靜態(tài)成員:靜態(tài)數(shù)據(jù)成員、靜態(tài)成員函數(shù)。友元函數(shù):友元函數(shù)、友元類。靜態(tài)成員和友元函數(shù)的應(yīng)用場景。概念解釋靜態(tài)成員是屬于類本身,而不是屬于類的具體對象。友元函數(shù)或友元類可以訪問類的私有成員,打破了類的封裝性。靜態(tài)成員的聲明與定義聲明靜態(tài)成員在類內(nèi)使用**static**關(guān)鍵字聲明靜態(tài)成員,并在類外進(jìn)行定義。定義靜態(tài)成員使用**類名::**訪問靜態(tài)成員,并對其進(jìn)行定義。示例例如,聲明一個(gè)靜態(tài)整型變量count,并在類外定義其值為0。靜態(tài)數(shù)據(jù)成員靜態(tài)數(shù)據(jù)成員用于存儲所有對象共享的數(shù)據(jù),它們是類的屬性而非對象的屬性。靜態(tài)成員函數(shù)靜態(tài)成員函數(shù)不能直接訪問非靜態(tài)成員,但可以訪問靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)。靜態(tài)成員的初始化1聲明階段在類定義中聲明靜態(tài)成員2定義階段在類外定義并初始化靜態(tài)成員3初始化列表在類外定義并初始化靜態(tài)成員4const靜態(tài)成員在類定義中初始化const靜態(tài)成員靜態(tài)成員的初始化是類定義的重要組成部分,它定義了靜態(tài)成員的值。靜態(tài)成員的初始化可以發(fā)生在類定義的內(nèi)部或外部。在類定義內(nèi)部,可以使用初始化列表對const靜態(tài)成員進(jìn)行初始化。在類定義外部,使用作用域運(yùn)算符來定義并初始化靜態(tài)成員。靜態(tài)成員的訪問方式11.通過類名訪問靜態(tài)成員屬于類本身,可以直接通過類名訪問。22.通過對象訪問也可以通過對象來訪問靜態(tài)成員,但一般不建議這種方式。33.靜態(tài)成員函數(shù)內(nèi)部靜態(tài)成員函數(shù)可以直接訪問同類中的所有靜態(tài)成員。靜態(tài)成員的優(yōu)缺點(diǎn)優(yōu)點(diǎn)節(jié)省內(nèi)存空間,同一個(gè)類的所有對象共享靜態(tài)成員。優(yōu)點(diǎn)方便訪問,不需要通過對象就能訪問靜態(tài)成員。缺點(diǎn)無法在構(gòu)造函數(shù)中初始化靜態(tài)成員,需要在類外進(jìn)行初始化。缺點(diǎn)靜態(tài)成員不能直接訪問非靜態(tài)成員,需要通過對象才能訪問。靜態(tài)數(shù)據(jù)成員的應(yīng)用場景計(jì)數(shù)器每個(gè)類對象共享同一個(gè)靜態(tài)數(shù)據(jù)成員,可以用于統(tǒng)計(jì)某個(gè)類對象的創(chuàng)建次數(shù)或特定事件發(fā)生的次數(shù)。全局變量靜態(tài)數(shù)據(jù)成員類似于全局變量,但它具有更好的封裝性和訪問控制,避免了命名沖突和無意修改的風(fēng)險(xiǎn)。緩存存儲一些常用的數(shù)據(jù),例如配置信息或頻繁使用的計(jì)算結(jié)果,提高程序效率。靜態(tài)成員函數(shù)的聲明與定義1聲明方式靜態(tài)成員函數(shù)的聲明與普通成員函數(shù)類似,但需要在函數(shù)名前添加**static**關(guān)鍵字。2定義方式靜態(tài)成員函數(shù)的定義需要在類外進(jìn)行,并且必須使用作用域解析運(yùn)算符(::)來指定所屬類。3示例代碼classMyClass{public:staticvoidstaticMethod();};voidMyClass::staticMethod(){//函數(shù)體}靜態(tài)成員函數(shù)的用途訪問類數(shù)據(jù)靜態(tài)成員函數(shù)可以直接訪問類的靜態(tài)成員變量,無需創(chuàng)建對象。這對于管理全局?jǐn)?shù)據(jù)或共享資源非常有用。創(chuàng)建工廠方法靜態(tài)成員函數(shù)可以作為工廠方法,用于創(chuàng)建類的實(shí)例。這有助于隱藏對象的創(chuàng)建過程并提供更靈活的實(shí)例化方式。實(shí)現(xiàn)輔助功能靜態(tài)成員函數(shù)可以提供輔助功能,例如驗(yàn)證輸入、轉(zhuǎn)換數(shù)據(jù)或執(zhí)行與類相關(guān)的其他操作,而無需依賴特定對象。靜態(tài)成員函數(shù)的訪問方式類外部訪問使用類名和作用域運(yùn)算符(::)來訪問靜態(tài)成員函數(shù)。類內(nèi)部訪問直接使用靜態(tài)成員函數(shù)名進(jìn)行調(diào)用,不需要使用對象或指針。友元函數(shù)訪問友元函數(shù)可以像普通成員函數(shù)一樣直接訪問類的靜態(tài)成員函數(shù)。友元函數(shù)的概念友元函數(shù)是定義在類外部的普通函數(shù)。友元函數(shù)可以通過類名和作用域運(yùn)算符來訪問類的私有成員。友元函數(shù)不是類成員,因此它不屬于任何類。友元函數(shù)的聲明與定義1函數(shù)聲明友元函數(shù)在類定義內(nèi)部聲明2關(guān)鍵字friend使用friend關(guān)鍵字修飾3函數(shù)定義函數(shù)定義在類外部友元函數(shù)聲明在類定義內(nèi)部,使用friend關(guān)鍵字修飾。定義在類外部,可以使用類的私有成員。例如:classMyClass{friendvoidfunc(MyClassobj);private:intdata;};voidfunc(MyClassobj){obj.data=10;}友元函數(shù)的特點(diǎn)11.非成員函數(shù)友元函數(shù)不是類的成員函數(shù),它不屬于任何類。22.訪問權(quán)限友元函數(shù)可以訪問類的私有成員,不受訪問控制限制。33.聲明方式在類定義中使用friend關(guān)鍵字聲明友元函數(shù)。44.靈活應(yīng)用友元函數(shù)可以實(shí)現(xiàn)類之間的數(shù)據(jù)共享和操作,提高代碼可重用性。友元函數(shù)的應(yīng)用場景增強(qiáng)代碼封裝性友元函數(shù)可以訪問私有成員,但不會(huì)破壞類的封裝性,可以實(shí)現(xiàn)特定的功能。實(shí)現(xiàn)數(shù)據(jù)共享友元函數(shù)可以在不同的類之間共享數(shù)據(jù),并對數(shù)據(jù)進(jìn)行操作,避免直接暴露類的私有成員。友元類的概念友元類是指允許另一個(gè)類訪問其私有成員的類。友元類可以訪問其友元類的所有成員,包括私有成員和受保護(hù)成員。友元類是建立在類之間的特殊關(guān)系,打破了類的封裝性,但有時(shí)可以方便地實(shí)現(xiàn)代碼共享和數(shù)據(jù)訪問。友元類的聲明與定義1聲明使用friend關(guān)鍵字聲明友元類2訪問權(quán)限友元類可以訪問被友元類聲明的類的私有成員3示例友元類可以訪問其他類的私有成員,例如,類A聲明類B為其友元,類B就可以訪問類A的私有成員。友元類的聲明為友元類提供了訪問權(quán)限,可以訪問其他類的私有成員,這在一些場景下可以簡化代碼結(jié)構(gòu)和提高代碼可讀性。友元類可以被聲明為其他類的友元,而友元關(guān)系是單向的,即友元類可以訪問被友元類聲明的類的私有成員,但被友元類聲明的類不能訪問友元類的私有成員。友元類的權(quán)限訪問訪問權(quán)限友元類可以訪問被它聲明為友元的類的私有成員。訪問私有成員友元類可以通過友元關(guān)系訪問被它聲明為友元的類的私有成員,而不需要使用任何特殊的語法。類內(nèi)與類外的友元關(guān)系類內(nèi)友元在類內(nèi)部聲明友元函數(shù)或友元類,直接訪問類成員,包括私有成員。類外友元在類外部聲明友元函數(shù)或友元類,需要使用友元聲明,允許訪問類成員,包括私有成員。權(quán)限訪問友元關(guān)系是單向的,被聲明為友元者可以訪問聲明類的成員,反之則不行。多重友元關(guān)系多類友元一個(gè)類可以同時(shí)擁有多個(gè)友元類,友元關(guān)系可以是雙向或單向的。相互友元兩個(gè)類可以互相聲明對方為友元,共享彼此的私有成員。間接友元通過中間類建立友元關(guān)系,間接訪問另一個(gè)類的私有成員。友元的局限性訪問范圍限制友元關(guān)系無法跨越命名空間,只能在同一命名空間內(nèi)使用。友元函數(shù)不能訪問私有成員,只能訪問公有和保護(hù)成員。代碼可讀性降低友元關(guān)系增加了代碼的復(fù)雜度,難以追蹤代碼邏輯。過多的友元關(guān)系可能導(dǎo)致代碼混亂,降低代碼的可維護(hù)性。靜態(tài)成員與友元的異同靜態(tài)成員屬于類,不屬于對象。靜態(tài)成員函數(shù)無法訪問非靜態(tài)成員,但可訪問靜態(tài)成員。靜態(tài)成員函數(shù)只能通過類名訪問,無法通過對象訪問。友元允許其他類或函數(shù)訪問自己的私有成員和保護(hù)成員。友元關(guān)系是非對稱的,一個(gè)類或函數(shù)可以是另一個(gè)類的友元,反之不一定成立。靜態(tài)成員與友元的組合應(yīng)用1增強(qiáng)封裝性友元函數(shù)可以訪問類的私有成員,增強(qiáng)了代碼的可讀性和維護(hù)性。2提高代碼復(fù)用性靜態(tài)成員函數(shù)可被所有對象共享,避免了重復(fù)代碼,提高了代碼效率。3優(yōu)化數(shù)據(jù)管理靜態(tài)數(shù)據(jù)成員可以存儲所有對象共享的信息,減少了內(nèi)存使用,提高了代碼效率。編程實(shí)踐1創(chuàng)建類創(chuàng)建名為“Person”的類,包含靜態(tài)數(shù)據(jù)成員“count”和非靜態(tài)數(shù)據(jù)成員“name”。定義構(gòu)造函數(shù)在構(gòu)造函數(shù)中,將“count”加1,并將“name”初始化為參數(shù)傳入的值。定義成員函數(shù)定義名為“showCount”的靜態(tài)成員函數(shù),用于顯示當(dāng)前創(chuàng)建的人員數(shù)量“count”。編寫主函數(shù)在主函數(shù)中,創(chuàng)建兩個(gè)“Person”對象,并分別調(diào)用“showCount”靜態(tài)成員函數(shù),觀察結(jié)果變化。編程實(shí)踐21友元函數(shù)定義一個(gè)友元函數(shù),允許訪問私有成員,測試友元函數(shù)的訪問權(quán)限。2靜態(tài)數(shù)據(jù)成員定義一個(gè)靜態(tài)數(shù)據(jù)成員,使用靜態(tài)成員函數(shù)進(jìn)行操作,測試靜態(tài)數(shù)據(jù)成員的訪問方式。3友元類定義一個(gè)友元類,允許其成員函數(shù)訪問另一個(gè)類的私有成員,測試友元類之間的訪問權(quán)限。編程實(shí)踐31模擬銀行系統(tǒng)使用靜態(tài)數(shù)據(jù)成員存儲銀行賬戶信息,并使用靜態(tài)成員函數(shù)進(jìn)行存款、取款等操作2學(xué)生成績管理系統(tǒng)使用靜態(tài)數(shù)據(jù)成員存儲學(xué)生信息,并使用靜態(tài)成員函數(shù)進(jìn)行成績統(tǒng)計(jì)、排序等操作3簡單的游戲程序使用靜態(tài)數(shù)據(jù)成員存儲游戲狀態(tài),并使用靜態(tài)成員函數(shù)實(shí)現(xiàn)游戲邏輯編程實(shí)踐4友元函數(shù)應(yīng)用設(shè)計(jì)一個(gè)包含私有數(shù)據(jù)成員的類,并定義一個(gè)友元函數(shù),實(shí)現(xiàn)對私有成員的訪問。友元類的應(yīng)用定義兩個(gè)類,其中一個(gè)類聲明另一個(gè)類為其友元,并在友元類中訪問被訪問類的私有成員。多重友元設(shè)計(jì)多個(gè)類,其中一個(gè)類同時(shí)聲明多個(gè)類為其友元,并驗(yàn)證友元關(guān)系的實(shí)現(xiàn)。課程小結(jié)靜態(tài)成員靜態(tài)成員屬于類本身,不屬于對象。它們在類定義時(shí)分配空間,所有對象共享一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 健康管理公司合同范例
- 雙經(jīng)銷合同范本
- 單位裝修工程合同范本
- 銷售藥膏合同范本
- 2025年太陽能發(fā)電機(jī)組項(xiàng)目合作計(jì)劃書
- 各類合同范本超全
- 合同范本紙制
- 商鋪的出租合同范本
- 承接糧庫工程合同范本
- 廠房設(shè)備合同范例
- (完整word版)新《中華頌》朗誦稿
- 糖尿病健康教育及飲食指導(dǎo)
- PFMEA模板完整版文檔
- 三無曲線(有緩)繩正法撥道自動(dòng)計(jì)算表
- 教學(xué)能力比賽決賽 《英語》教案
- 《母雞》課件 王崧舟 千課萬人 (圖片版不可編輯)
- 離婚糾紛證據(jù)清單
- 臨床三基考試題庫臨床醫(yī)師三基考試題庫
- 商貿(mào)公司企業(yè)范文
- 第一章《原子結(jié)構(gòu)與性質(zhì)》測試卷-高二化學(xué)人教版(2019)選擇性必修2
- YY/T 1761-2021透析管路消毒液
評論
0/150
提交評論