friend類:
如果class A想讓class B訪問它的成員锅论,只需要在class A中將class B聲明稱有友元類。
class A{
? friend class B
}轧邪;
class B{
}刽脖;
這樣B內(nèi)就可以直接訪問A內(nèi)的成員。
friend函數(shù):
friend 類型名 友元函數(shù)名(形參表)忌愚;
1.被聲明為兩個(gè)類的友元函數(shù)
如果我們決定一個(gè)函數(shù)必須被聲明為兩個(gè)類的友元?jiǎng)t友元聲明如下:
class A{
? friend void func();
}曲管;
class B{
? ? friend void func();
};
2.作為一個(gè)類的函數(shù)又是另一個(gè)類的友元
如果我們決定該函數(shù)必須作為一個(gè)類的成員函數(shù)并又是另一個(gè)類的友元菜循,則成員函數(shù)聲明和友元聲明如下:
class A{
? void func();
}翘地;
class B{
? ? friend void A::func();
};
(1) 友元關(guān)系不能被繼承癌幕。?
(2) 友元關(guān)系是單向的衙耕,不具有交換性。若類B是類A的友元勺远,類A不一定是類B的友元橙喘,要看在類中是否有相應(yīng)的聲明。?
(3) 友元關(guān)系不具有傳遞性胶逢。若類B是類A的友元厅瞎,類C是B的友元,類C不一定是類A的友元初坠,同樣要看類中是否有相應(yīng)的申明
說明如下:?
1)必須在類的說明中說明友元函數(shù)和簸,說明時(shí)以關(guān)鍵字friend開頭,后跟友元函數(shù)的函數(shù)原型碟刺,友元函數(shù)的說明可以出現(xiàn)在類的任何地方锁保,包括在private和public部分;
2)注意友元函數(shù)不是類的成員函數(shù)半沽,所以友元函數(shù)的實(shí)現(xiàn)和普通函數(shù)一樣爽柒,在實(shí)現(xiàn)時(shí)不用”::”指示屬于哪個(gè)類,只有成員函數(shù)才使用”::”作用域符號(hào)者填;
3)友元函數(shù)不能直接訪問類的成員浩村,只能訪問對(duì)象成員;
4)友元函數(shù)可以訪問對(duì)象的私有成員占哟,但普通函數(shù)不行心墅;
5)調(diào)用友元函數(shù)時(shí),在實(shí)際參數(shù)中需要指出要訪問的對(duì)象榨乎;
6)類與類之間的友元關(guān)系不能繼承嗓化;
7)一個(gè)類的成員函數(shù)也可以作為另一個(gè)類的友元,但必須先定義這個(gè)類谬哀。