友元函式的使用方法
我們都知道類中的私有成員,只有被類裡的成員函式訪問,在類外是不能訪問的。這體現了C++中類設計的封裝、隱蔽思想。是C++最基本的優點。
但如果偶爾有的時候,我們在類外又確實想訪問這些私有成員,就會變得麻煩很多,就處於既訪問不到又不能宣告為public型別的兩難處境。
而友元的出現就可以很好的解決這個問題。即把外部的函式宣告為友元型別,賦予它可以訪問類內私有成員的權利。來做到兩全其美。這就是友元的意義,從字面意思也可以看出來,像“朋友”一樣,開了一個綠色通道。
友元的物件,它可以是全域性的一般函式,也可以是其他類裡的成員函式,這種叫做友元函式。不僅如此,友元還可以是一個類,這種叫做友元類。
理解友元的意義和作用後,我們來看怎麼在C++中使用。
對於友元函式,只需要在類內對這個函式進行宣告,並在之前加上friend關鍵字。這個函式就具有了獨特的許可權,成為友元函式。
最後需要注意的是,友元並不屬於這個類本身,無論是友元函式還是友元類。都不能使用類內的this指標,同時也不可以被繼承,如同父親的朋友不一定是兒子的朋友這個道理。
下面,我們寫一個求兩點之間距離的程式陳旭:
include
include
using namespace std; class Point { private: double x; double y; public: Point(double a,double b) { x = a; y = b; } int GetPoint() { cout<<"("<
return sqrt(xx*xx+yy*yy);
} int main() { Point A(2.0,3.0); Point B(1.0,2.0); double dis; dis = Distance(A,B); cout<
大家可以觀察實現求兩點之間距離的函式為外部的一般函式,由於需要訪問類內的私有成員,所以我們把它在類內宣告成frined友元型別,見Point類內的最後一行。此時程式碼編譯無問題,正常輸出:
youyuan.png
可以看到測試結果,大家可以上機自行實驗,分別嘗試不宣告為friend型別觀察報錯結果。
相關文章
- 友元類的使用方法
- C++類將函式模板宣告為友元 例項C++函式
- Java script 中的函式使用方法Java函式
- Sql中SYSDATE函式的使用方法SQL函式
- Python中zip函式的使用方法Python函式
- Django中 render() 函式的使用方法Django函式
- Python列表中set函式的使用方法!Python函式
- Unity&Shader常用函式的使用方法Unity函式
- c++單例模式、常量成員函式、引數傳遞、友元C++單例模式函式
- 詳解MySQL中的SQRT函式的使用方法MySql函式
- C語言函式指標與回撥函式使用方法C語言函式指標
- 友元
- Python的hasattr() getattr() setattr() 函式使用方法詳解Python函式
- 07友元
- C++中的友元C++
- 簡單介紹SQL中ISNULL函式使用方法SQLNull函式
- 織夢DedeCMS獲取文章連結的函式GetOneArchive使用方法函式Hive
- 理解神經元和函式函式
- laravel mysql聚合函式使用方法(count,sum,max,min,avg)LaravelMySql函式
- C++——內聯,友元C++
- 其他成員與友元
- 遞迴、三元表示式、生成式(列表,字典)、匿名函式遞迴函式
- main函式的入口函式AI函式
- 類别範本與友元
- 二元函式的極值與最值問題函式
- vlookup函式不會用?詳細使用方法就在這兒,用心學!函式
- Mysql資料庫自定義函式的定義、使用方法及操作注意事項MySql資料庫函式
- 箭頭函式、簡寫函式、普通函式的區別函式
- 仿函式是什麼?仿函式什麼時候必須繼承一元或者二元謂詞函式繼承
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- Sql 中的 left 函式、right 函式SQL函式
- 閉包函式(匿名函式)的理解函式
- Rust中的into函式和from函式Rust函式
- 函式: 函式是怎麼使用的?函式
- zblog獲取GET/POST等值函式“GetVars”引數和使用方法介紹函式
- python內建函式-eval()函式與exec()函式的區別Python函式
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter