友元靜態(tài)及類模板.ppt_第1頁
友元靜態(tài)及類模板.ppt_第2頁
友元靜態(tài)及類模板.ppt_第3頁
友元靜態(tài)及類模板.ppt_第4頁
友元靜態(tài)及類模板.ppt_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、3.9 靜態(tài)成員,3.9.1 靜態(tài)數(shù)據(jù)成員,靜態(tài)數(shù)據(jù)成員初始化格式如下: 類型 類名:靜態(tài)數(shù)據(jù)成員名= 值; 例如: int A:sum=0;,靜態(tài)數(shù)據(jù)成員聲明格式如下: static 類型 靜態(tài)數(shù)據(jù)成員名; 例如: static int sum;,在類內(nèi),在類外,class A public: A(int x,int y) /構(gòu)造函數(shù) a=x;b=y; A( ) /構(gòu)造函數(shù) void getXY() /成員函數(shù) coutX=atY=bendl; void getSUM() /成員函數(shù) sum=sum+a+b; coutSUM=sumendl; private: int a,b; static

2、 int sum; /靜態(tài)數(shù)據(jù)成員聲明 ; int A:sum=0; /靜態(tài)數(shù)據(jù)成員在類體外的初始化 void main() A a1(1,2); a1.getXY(); a1.getSUM(); A a2(3,4); a2.getXY(); a2.getSUM(); ,例如:#include class A public: static int x; /聲明公有的靜態(tài)數(shù)據(jù)成員 ; int A:x=10; void main() coutA:xendl; A:x=20; /通過類名訪問靜態(tài)數(shù)據(jù)成員 coutA:xendl; ,格式如下: 類名:靜態(tài)數(shù)據(jù)成員名,3.9.2 靜態(tài)成員函數(shù),#inc

3、lude class A public: A(int x1,int x2) x=x1; y=y+x2; A() static void fun1() cout “Y= ”yendl; /靜態(tài)成員函數(shù) static void fun2(A a); /聲明靜態(tài)成員函數(shù) private: int x; static int y; ; void A:fun2(A a) cout X=a.xtY=yendl; int A:y=0; /靜態(tài)成員初始化 void main() A a(1,2); a.fun1(); /通過對象名訪問 A:fun2(a); /通過類名訪問 ,案例 靜態(tài)成員函數(shù)。,3.10.1

4、 友元函數(shù),3.10 友元,#include class A /聲明類A public: void memberfun (int x); /成員函數(shù) ; class B /聲明類B public: B( ) /構(gòu)造函數(shù) B(int x1) /構(gòu)造函數(shù) x=x1; B( ) /析構(gòu)函數(shù) void getX() /成員函數(shù) cout X= xendl; friend void fun(); /友元函數(shù)聲明 friend void A:memberfun(int x); /友元函數(shù)聲明 private: int x; ;,void A:memberfun(int x) /A類的成員函數(shù),也是B類的友

5、元函數(shù) B b(0); /聲明B類的對象b,初始值為0 cout X= b.xendl; b.x=x; cout X= b.xendl; void fun() B b(10); /聲明B類的對象b,初始值為10 cout X= b.xendl; void main() fun(); /調(diào)用友元函數(shù) A a; /聲明A類的對象a a.memberfun(100); /調(diào)用友元函數(shù) ,(續(xù)),3.10.2 友元類,class Date private: int year, month, day; public: Date(int y, int m, int d) year=y; month=m;

6、day=d; friend class Clock; /聲明Clock類為Date類的友元類 ; class Clock /聲明Clock類 public: void ShowNowDate(Date ,模板(templates),一、模板( Templates )的概念。,模板是根據(jù)參數(shù)類型生成函數(shù)和類的機(jī)制(有時稱為“參數(shù)決定類型”)。通過使用模板,可以只設(shè)計一個類來處理多種類型的數(shù)據(jù),而不必為每一種類型分別創(chuàng)建類。 例如,我們要實現(xiàn)一個加法函數(shù),他能夠?qū)蓚€參數(shù)求和,并根據(jù)參數(shù)的類型返回具有適當(dāng)類型的值 。如果不使用Templates,必須要編寫一系列如下的重載函數(shù):,一、模板( Tem

7、plates )的概念。,shortsum(shorta,shortb) returna+b; intsum(inta,intb)returna+b; floatsum(floata,floatb)returna+b; 非常麻煩,可以用c+的模板函數(shù)來表達(dá)“通用型的函數(shù)”。 template Tsum(Ta,Tb) returna+b; 模板能夠減少源代碼量并提高代碼的機(jī)動性而不會降低類型安全。,一、模板( Templates )的概念,現(xiàn)在,c+編譯器可以根據(jù)我們調(diào)用sum函數(shù)的參數(shù)類型“現(xiàn)場”生成一個適當(dāng)?shù)暮瘮?shù),然后調(diào)用它。例如: #include intmain(void) floatf

8、a=1,fb=3,fs; fs=sum(fa,fb); cout”sum(float,float)1and3=”fsendl; ,一、模板( Templates )的概念,模板分為函數(shù)模板和類模板兩種。 采用模板方式定義函數(shù)或類時不確定某些函數(shù)參數(shù)或數(shù)據(jù)成員的類型,而將它們的數(shù)據(jù)類型作為模板的參數(shù)。在使用模板時根據(jù)實參的數(shù)據(jù)類型確定模板參數(shù)(數(shù)據(jù)類型)的數(shù)據(jù)類型。 模板提高了軟件的重用性。當(dāng)函數(shù)參數(shù)或數(shù)據(jù)成員可以是多種類型而函數(shù)或類所實現(xiàn)的功能又相同時,使用C+模板在很大程度上簡化了編程。,類模板,函數(shù)模板只能用于定義非成員函數(shù),它是模板的一個特例。類模板實際上是函數(shù)模板的推廣,它是一種不確定

9、類的某些數(shù)據(jù)成員的類型或成員函數(shù)的參數(shù)及返回值的類型的類。,1. 類模板與函數(shù)模板,2. 類模板與類,類是對問題的抽象,而類模板是對類的抽象,即更高層次上的抽象。,類模板稱為帶參數(shù)(或參數(shù)化)的類,也稱為類工廠,它可用來生成多個功能相同而某些數(shù)據(jù)成員的類型不同或成員函數(shù)的參數(shù)及返回值的類型不同的類。,為了起到模板的作用,與函數(shù)模板一樣,定義一個類模板時必須將某些數(shù)據(jù)類型作為類模板的類型參數(shù)。 模板類的實現(xiàn)代碼與普通類沒有本質(zhì)上的區(qū)別,只是在定義其成員時要用到類模板的類型參數(shù)。,3. 類模板的定義,例如,以下定義了含有一個類型參數(shù)的類模板:,template class MyTemClass p

10、rivate: T x; / 類型參數(shù)T用于聲明數(shù)據(jù)成員 public: void SetX( T a ) x=a; ; / 類型參數(shù)T用于聲明成員函數(shù)的參數(shù) T GetX( ) return x; ; / 類型參數(shù)T用于聲明成員函數(shù)的返回值 ;,如果在模板類的外部定義模板類的成員函數(shù),必須采用如下形式: template / 不能省略模板聲明 void MyTemClass : SetX( T a ) x=a; (每個定義都要模板聲明),注意:,4. 類模板的實例化,與函數(shù)模板不同,類模板不是通過調(diào)用函數(shù)時實參的數(shù)據(jù)類型來確定類型參數(shù)具體所代表的類型,而是通過在使用模板類聲明對象時所給出的實

11、際數(shù)據(jù)類型確定類型參數(shù)。,例如,以下使用類模板聲明了一個類型參數(shù)為int的模板類的對象: MyTemClass intObject;,對于上面的對象聲明: 編譯器首先用int替代模板類定義中的類型參數(shù)T,生成一個所有數(shù)據(jù)類型已確定的類class; 然后再利用這個類創(chuàng)建對象intObject 。,5. 含有多個參數(shù)類模板的定義,template class MyTemClass . . . ,例如,聲明模板類的對象應(yīng)采用如下形式: MyTemClass MyObject ;,例 使用多個類型參數(shù)的類模板。,template / 使用2個類型參數(shù) class MyTemClass/ 定義模板類 p

12、rivate: T1 x; T2 y; public: MyTemClass(T1 a, T2 b) x=a; y=b; ; void ShowMax() cout=y?x:y)endl; ; ;,void main() int a=100; float b=123.45F; MyTemClass mt(a, b); / 聲明模板類的對象 mt.ShowMax(); ,類模板 的實例化,小 結(jié),1. C+語言中,類是一種用戶自定義數(shù)據(jù)類型,是一組變量及其相關(guān)函數(shù)的組合。類中的變量稱為類的成員變量或數(shù)據(jù)成員;函數(shù)稱為類的成員函數(shù)。類成員按訪問控制權(quán)限分為3類:私有成員、保護(hù)成員和公有成員。 2.

13、 類的成員函數(shù)可以帶默認(rèn)形參值,也可以定義為內(nèi)聯(lián)函數(shù)。而且,除析構(gòu)函數(shù)外,都可以重載。 3. 對象是類的實例。聲明對象時,可以同時初始化其數(shù)據(jù)成員。不過,對象數(shù)據(jù)成員的初始化需要通過類的構(gòu)造函數(shù)進(jìn)行。而對象終止時,系統(tǒng)需要調(diào)用析構(gòu)函數(shù)。 4. 如果一個對象在程序運(yùn)行過程中其值不變,就應(yīng)該把它聲明為常對象。 5. 類的數(shù)據(jù)成員可以聲明靜態(tài)數(shù)據(jù)成員,也可以聲明為常數(shù)據(jù)成員;類的成員函數(shù)同樣可以聲明為靜態(tài)成員函數(shù)或常成員函數(shù)。,小 結(jié)(續(xù)),6. 類的數(shù)據(jù)成員可以是類類型。這種數(shù)據(jù)成員包含其它類對象的類,稱為組合類。創(chuàng)建組合類的對象時,將按內(nèi)嵌對在類中聲明的先后順序調(diào)用其相應(yīng)構(gòu)造函數(shù),最后調(diào)用該組合類的構(gòu)造函數(shù)。而析構(gòu)函數(shù)的調(diào)用順序相反。 7.用對象的引用作函數(shù)參數(shù),對函數(shù)內(nèi)部對象的改變將影響實參對象。使用對象的引用,關(guān)鍵是建立引用。對象數(shù)組,即所有數(shù)組元素都是某個類的對象。對象指針即指向?qū)ο蟮闹羔?。用對象?shù)組訪問成員的方式是:對象數(shù)組名下標(biāo).成員名,用對象指針訪問成員的方式是:對象指針名-成員名。 8. 友元提供了在不同類的成員函數(shù)之間、類的成員函數(shù)與一般函數(shù)之間進(jìn)行數(shù)據(jù)共享的機(jī)制。類的友元可以是函數(shù),也可以是類。若是函數(shù),則該函數(shù)叫友元函數(shù);若是類

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論