c++中建立類的時候會有公共許可權、保護許可權、私有許可權。往往是訪問不到乙個類中私有許可權中內容的。
在程式中,有些私有屬性 也想讓類外特殊的一些函式或者類進行訪問,就需要用到友元的技術,這樣一來兩個類就可以共享資料。節省記憶體空間。 如果友元是一般成員函式或者類的成員函式,則稱為友元函式,如果友元是乙個類則稱為友元類。友元類中所有的成員函式都是友元函式。接下來會分別介紹。
友元的目的:就是讓乙個函式或者類 訪問另乙個類中私有成員 友元的關鍵字為 friend
1、全域性函式做友元
2、類做友元
3、 成員函式做友元
#include
using
namespace std;
#include
class
building
public
: string m_sittingroom;
private
: string m_bedroom;};
//類外建立乙個全域性函式實現訪問類內的私有、公共的成員變數
void
familynumber
(building *building)
void
test01()
intmain()
乙個類可以訪問另外乙個類中的私有成員。
//類做友元函式,建立兩個類,用其中乙個類去訪問另外乙個類中的私有成員
//下面寫乙個例項,建立乙個父親類、乙個房間類,父親類可以訪問房間中的臥室私有屬性
class
building
;//在前面宣告一下,要不然會報錯
class
father
;class
building
;//在類外寫成員函式,前面加上成員函式的類名稱和作用域
building::
building()
//在類外寫成員函式,前面加上成員函式的類名稱和作用域
father::
father()
//在類外寫成員函式,前面加上成員函式的類名稱和作用域
void father::
visit()
void
test01()
intmain()
其實成員函式做友元很簡單,就是在另外乙個類中將成員函式變為友元函式 即可
//成員函式做友元函式 和上面類做友元函式區別不是很大
class
building
;//在前面宣告一下
class
father
;class
building
;//在類外寫成員函式,前面加上成員函式的類名稱和作用域
building::
building()
//在類外寫成員函式,前面加上成員函式的類名稱和作用域
father::
father()
//在類外寫成員函式,前面加上成員函式的類名稱和作用域
void father::
visit()
//對於成員函式 father類中的成員函式void visit1();就訪問不了building類中的私有成員。
void father::
visit1()
void
test01()
intmain()
注意友元函式在使用的過程中
1、類與類之間的友元關係不能被繼承。(友元不屬於類的成員函式)
2、友元函式破壞了封裝的機制,最好謹慎使用。
3、友元函式就是讓乙個函式或者類 訪問另乙個類中私有成員,但是對於多個類之間的訪問,友元函式不具有傳遞性。
友元類的相關知識
1 友元類的所有成員函式都是另乙個類的友元函式,都可以訪問另乙個類中的隱藏資訊 包括私有成員和保護成員 2 友元關係不能被繼承。3 友元關係是單向的,不具有交換性。若類b是類a的友元,類a不一定是類b的友元,要看在類中是否有相應的宣告。4 友元關係不具有傳遞性。若類b是類a的友元,類c是b的友元,類...
有關C 中類的友元的知識
乙個類可以宣告乙個普通函式或者另乙個類的成員函式成為這個類的友元函式,也可以宣告另乙個類為這個類的友元類,因此友元就包括友元函式和友元類。而友元類的成員函式會自動成為這個類的友元函式。友元的引入其實就是為了解決程式中的資料共享問題,而類的友元就解決了類與類之間,類與函式之間的資料共享。類的友元函式的...
C 中的友元
乙個類的私有成員除了它的成員函式之外是不能被其他類或函式所訪問的。為了能構使其他類或函式能訪問類的私有成員,我們可以使其他類或函式成為該類的友元。如果想把乙個類或函式作為該類的友元,則只需在在該類或函式的宣告前加個friend,注意帶有friend的宣告必須在類的內部 如前言所述,要想將乙個函式宣告...