C++友元函數友元類

C++面向對象的特性,需要很多特殊的設計,來滿足各種使用需求,比如:

1。類的實例化對象希望共享一些屬性和方法,類似於C語言的公共頭文件,而設計了靜態成員,區別於C語言的地方是,靜態數據成員必須進行初始化。

2。針對指向常對象的指針和指向對象的常指針,而設計了常對象,常成員,通過常成員函數來訪問常數據成員。

3。針對基類指針根據派生類不同而希望實現多種形態的需求,設計了虛函數。

 

那麼類A想調用類B的一些私有成員,又該如何呢?

 

類的私有成員只能被基類的實例調用,這是類的封裝帶來的安全性保證,如果是公有成員,則會破壞類的封裝。

友元函數是可以直接訪問類的私有成員的非成員函數。它是定義在類外的普通函數,定義時不需要加類名,因爲它不屬於任何類,只有這樣才能被像普通函數一樣調用,但需要在類的定義中加以聲明,聲明時只需在友元的名稱前加上關鍵字friend。

 

友元關係不能被繼承,基類的友元對派生類沒有特殊的訪問權限。

 

 

class 類名{public:    friend class 友元類名;    friend 類型 友元函數名;}

 

 

使用場景:

 

面向對象的封裝特性,對外提供訪問權限的幾種途徑:

1.public成員函數,破壞封裝

2.setter/getter方法,代碼繁瑣

3.友元函數,如果訪問的資源更多,則友元類(比如遙控器類控制電視類)

4.把共有數據提取出來,採用靜態成員、靜態成員函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章