同類(lèi)的多個(gè)成員實(shí)現(xiàn)數(shù)據(jù)共享(全局變量破壞封裝性,但靜態(tài)成員要注意作用域)
1.只能在類(lèi)體外初始化,通過(guò)類(lèi)名引用(而不是對(duì)象)
2.在類(lèi)外可以用對(duì)象引用公共靜態(tài)數(shù)據(jù)成員,也可用類(lèi)名引用靜態(tài)數(shù)據(jù)成員
3.私有靜態(tài)數(shù)據(jù)成員必須通過(guò)公共成員函數(shù)引用(公共成員函數(shù)可以引用靜態(tài)和非靜態(tài)數(shù)據(jù)成員)
1.可被對(duì)象或者類(lèi)調(diào)用(一般用類(lèi)Box::)
2.靜態(tài)成員函數(shù)沒(méi)有this指針,故不能訪問(wèn)本類(lèi)中的非靜態(tài)成員,而主要用來(lái)訪問(wèn)靜態(tài)數(shù)據(jù)成員
(若要調(diào)用,則應(yīng)該用對(duì)象或者對(duì)象的引用做參數(shù))
類(lèi)外定義的普通函數(shù)作為類(lèi)的友元,若要訪問(wèn)類(lèi)中的私有數(shù)據(jù),需要建立形參對(duì)象才能訪問(wèn)
friend void display(Time &);void display(Time &t){cout << t.hour;}●友元成員函數(shù)
Time的成員函數(shù)訪問(wèn)Date的數(shù)據(jù)成員
需要Date類(lèi)的提前聲明,類(lèi)內(nèi)此函數(shù)的友元類(lèi)引用,友元類(lèi)中的友元函數(shù)聲明
class Date;
class Time
{public:
void display();
void display(Date &);}
class Date
{friend void Time::display(Date &);}
void Time::display(Date &d)
{cout << d.month;}
t1.display();
t1.display(d1);//也要通過(guò)對(duì)象t1調(diào)用類(lèi)中函數(shù);
2.友元類(lèi)
若類(lèi)B是類(lèi)A 的友元類(lèi),B中所有函數(shù)可以訪問(wèn)A中的數(shù)據(jù)成員
友元是封裝的補(bǔ)充,一般不建議使用
單向性,不可傳遞
class Date;
class Time
{friendDate;
Public:…………}
總結(jié):若B想訪問(wèn)A,那么A就必須在本類(lèi)中聲明friendB(函數(shù)或類(lèi)),那么B就是A的友元
模板
首先看一下函數(shù)模板,T為數(shù)據(jù)類(lèi)型
功能相同而數(shù)據(jù)類(lèi)型不同的函數(shù)
Template<typename T>
T max(Ta, T b, T c){…returna;}
int i1=1,i2=2,i3=3,i;
i=max(i1,i2,i3);
類(lèi)模板
功能相同而數(shù)據(jù)類(lèi)型不同的類(lèi)
Template<typename T>
class Compare
{public:Compare(T a, T b); T max();
PRivate:T x, y;}
Compare<int>cmp(1,2);
注意:如果在類(lèi)模板外定義成員函數(shù),每個(gè)都要加template:
templare<typenameT>
void Compare<T>::display(){…………;}
說(shuō)明:
模板類(lèi)型參數(shù)可以有多個(gè),可以是類(lèi)型也可以是參數(shù)
templare<typename T,typename N,int KV>
class Some;
Some<int, double,5>obj;
總結(jié):
static :同類(lèi)不同對(duì)象的共享數(shù)據(jù)
友元:類(lèi)之間(或?qū)瘮?shù))的定向共享
模板:數(shù)據(jù)類(lèi)型或參數(shù)的參數(shù)化
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注