




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 第十四章 靜態(tài)成員與友元 假設(shè)想讓類的一切對象在類的范圍內(nèi)共享某個數(shù)據(jù),聲明為static的類成員便能在類范圍中共享,稱之為靜態(tài)成員。15.1 靜態(tài)成員的運用 成員有數(shù)據(jù)成員和成員函數(shù)之分,靜態(tài)成員也有靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)之分。靜態(tài)成員用static聲明。 例如,下面的程序在類中定義了一個靜態(tài)數(shù)據(jù)成員和一個靜態(tài)成員函數(shù),在它的構(gòu)造函數(shù)和析構(gòu)函數(shù)中對靜態(tài)數(shù)據(jù)成員進展操作,在運用程序中,調(diào)用了靜態(tài)成員函數(shù):#include #include class Studentpublic: Student(char* pName =no name) cout create one studentn
2、; strcpy(name, pName); noOfStudents+; /靜態(tài)成員:每創(chuàng)建一個對象,學 生人數(shù)增1 cout noOfStudents endl; Student() cout destruct one studentn; noOfStudents-; /每析構(gòu)一個對象,學生人數(shù)減1 cout noOfStudents endl; static int number() /靜態(tài)成員函數(shù) return noOfStudents; protected: static int noOfStudents; /假設(shè)寫成noOfStudents=0;那么非法 char name40;i
3、nt Student:noOfStudents =0; /靜態(tài)數(shù)據(jù)成員在類外分配空間和初始化void fn() Student s1; Student s2; cout Student:number() endl; /調(diào)用靜態(tài)成員函數(shù)用類名引導void main() fn(); cout Student:number() endl; /調(diào)用靜態(tài)成員函數(shù)用類名引導 數(shù)據(jù)成員noOfStudents,既不是對象s1也不是對象s2的一部分。Student類隨著對象的產(chǎn)生,每個對象都有一個name成員值,但無論對象有多少,甚至沒有,靜態(tài)成員noOfStudents也只需一個。一切Student對象都共
4、享它,并且可以訪問它。 在Student對象空間中,是沒有靜態(tài)數(shù)據(jù)成員noOfStudents的,它的空間分配并不在Student的構(gòu)造函數(shù)里完成,并且空間回收也不在類的析構(gòu)函數(shù)里完成。靜態(tài)數(shù)據(jù)成員在程序開場運轉(zhuǎn)時就存在了。15.2 靜態(tài)數(shù)據(jù)成員 公共靜態(tài)數(shù)據(jù)成員可被類的外部訪問,維護或私有靜態(tài)數(shù)據(jù)成員可被類的內(nèi)部訪問。 例如,下面的代碼描畫一個公共的靜態(tài)數(shù)據(jù)成員: class Student public: Student() noOfStudents+; / static int noOfStudents; /公共靜態(tài)數(shù)據(jù)成員 / ; void fn(Student& s1,Stu
5、dent& s2) couts1.noOfStudents; /此處也可以訪問靜態(tài)數(shù)據(jù)成員 在類的外部,訪問靜態(tài)數(shù)據(jù)成員的方式可以是s1.noOfStudents,它等價于s2.noOfStudents,更通常的用法是Student:noOfStudents(不能用Student.noOfStudents)。其意義是,靜態(tài)數(shù)據(jù)成員是屬于Student類的,而不是屬于哪個特定對象的,它也不需求依賴某個特定對象的數(shù)據(jù)。 靜態(tài)數(shù)據(jù)成員用得比較多的場所普通為: (1) 用來保管流動變化的對象個數(shù); (2) 作為一個標志,指示一個特定的動作能否發(fā)生; (3) 一個指向一個鏈表第一成員或最后一個成
6、員的指針. 例如,下面的程序描畫一個學生類,該類對象是一個個的學生,它們構(gòu)成一個單向鏈表: #include #include class Student public: Student(char* pName); Student(); protected: static Student* pFirst; Student* pNext; char name40; ; Student* Student:pFirst =0; Student:Student(char* pName) strncpy(name,pName,sizeof(name); namesizeof(name)-1 =0; pN
7、ext =pFirst; /每新建一個結(jié)點(對象),就將其 掛在鏈首 pFirst =this; Student:Student() cout name pNext) if(pS-pNext=this) /找到時,pS指向當前結(jié)點的結(jié)點 pS-pNext=pNext; /pNext即this-pNext return; Student* fn() Student* pS =new Student(Jenny); Student sb(Jone); return pS;void main() Student sa(Jamsa); Student* sb =fn(); Student sc(Tra
8、cey); delete sb;15.3 靜態(tài)成員函數(shù) 靜態(tài)成員函數(shù)定義是類的內(nèi)部實現(xiàn),屬于類定義的一部分。它的定義位置與普通成員函數(shù)一樣。 與靜態(tài)數(shù)據(jù)成員一樣,靜態(tài)成員函數(shù)與類相聯(lián)絡(luò),不與類的對象相聯(lián)絡(luò),所以訪問靜態(tài)成員函數(shù)時,不需求對象。假設(shè)用對象去援用靜態(tài)成員函數(shù),只是用其類型。 例如,下面的程序,兩種調(diào)用靜態(tài)成員函數(shù)的方法都是合法的,而且意義一樣: #include class Student public: static int number() return noOfStudents; /. protected: char name40; static int noOfStuden
9、ts; ; int Student:noOfStudents = 1; void main() Student s; cout s.number() endl; /ok 用對象援用 靜態(tài)成員函數(shù) cout Student:number() endl; /ok 用類名引導靜態(tài)成員函數(shù) 運轉(zhuǎn)結(jié)果為: 1 1 靜態(tài)成員函數(shù)與非靜態(tài)成員函數(shù)的根本區(qū)別是什么? 它們的根本區(qū)別在于靜態(tài)成員函數(shù)沒有this指針,而非靜態(tài)成員函數(shù)有一個指向當前對象的指針this。 例如: class Sc public: void nsfn(int a); /像聲明Sc:nsfn(Sc* this,int a); stati
10、c void sfn(int a); /無this指針 / void f(Sc& s) s.nsfn(10); /轉(zhuǎn)換為Sc:nsfn(&s,10) s.sfn(10); /轉(zhuǎn)換為Sc:sfn(10) 函數(shù)nsfn()可被以為它聲明為void Sc:nsfn(Sc* this,int a)。對nsfn()的調(diào)用,編譯像注解的那樣進展轉(zhuǎn)換,s的地址作為第一個傳送的參數(shù)。 在函數(shù)內(nèi)部,Sc:nsfn()對非靜態(tài)成員的訪問將自動地把this參數(shù)作為指向當前對象的指針。而當Sc:sfn()被調(diào)用時,沒有任何對象的地址被傳送。15.4 需求友元的緣由 友元函數(shù)完全是普通的C+函數(shù),不同的是,它可以訪問類的維護或私有成員,方便編程,提高了效率,但卻破壞了類的封裝。15.5 友元的運用 在類里聲明一個普通函數(shù),標上關(guān)鍵字friend,就
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 車輛過戶手續(xù)代理及車輛購置協(xié)議
- 網(wǎng)絡(luò)域名典當質(zhì)押貸款合同書模板
- 成品油運輸與物流金融合同
- 招標經(jīng)理面試題及答案
- 電子產(chǎn)品采購合同補充協(xié)議示范文本
- 小學家庭教育實施要點
- 私企運營面試題及答案
- 品管進廠考試題及答案
- 高端酒店服務(wù)員崗位招聘與勞動合同書
- 醫(yī)院資源使用方案
- GB 41317-2024燃氣用具連接用不銹鋼波紋軟管
- 幼小銜接 每日一練
- 《中國書法》參考課件
- 四年級上冊脫式計算400題及答案
- 船運土方方案
- 危巖穩(wěn)定性計算表格-滑移式-傾倒式-墜落式-完整版
- JCT640-2010 頂進施工法用鋼筋混凝土排水管
- 03K132 風管支吊架圖集
- 衛(wèi)生室藥房盤點明細表
- 沈陽市勞動合同書電子版
- 中華人民共和國漁撈日志
評論
0/150
提交評論