友元函式的使用方法
我們都知道類中的私有成員,只有被類裡的成員函式訪問,在類外是不能訪問的。這體現了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++函式
- round函式與trunc函式的使用方法函式
- C++類將函式模板宣告為友元 例項C++函式
- 關於友元函式過載輸入輸出運算子函式
- 【函式】Oracle中聚合函式rank()使用方法函式Oracle
- Java script 中的函式使用方法Java函式
- Django中 render() 函式的使用方法Django函式
- js中split函式的使用方法JS函式
- c++單例模式、常量成員函式、引數傳遞、友元C++單例模式函式
- Python中zip函式的使用方法Python函式
- Unity&Shader常用函式的使用方法Unity函式
- Python列表中set函式的使用方法!Python函式
- 詳解MySQL中的SQRT函式的使用方法MySql函式
- C語言函式指標與回撥函式使用方法C語言函式指標
- C++中的友元C++
- C++ 友元C++
- C++友元C++
- Oracle資料庫Decode()函式的使用方法Oracle資料庫函式
- Python的hasattr() getattr() setattr() 函式使用方法詳解Python函式
- YTU-OJ-Problem K: 熟悉題型——程式碼完善(輸出日期時間--友元函式)函式
- 理解神經元和函式函式
- 日曆函式單元 (轉)函式
- 一元、二元函式影象繪製函式
- C++——內聯,友元C++
- 其他成員與友元
- 簡單介紹SQL中ISNULL函式使用方法SQLNull函式
- PHP中get_headers函式使用方法解析PHPHeader函式
- ORACLE常用結構和函式使用方法總結Oracle函式
- 織夢DedeCMS獲取文章連結的函式GetOneArchive使用方法函式Hive
- Oracle分析函式RANK(),ROW_NUMBER(),LAG()等的使用方法(轉)Oracle函式
- laravel mysql聚合函式使用方法(count,sum,max,min,avg)LaravelMySql函式
- 遞迴、三元表示式、生成式(列表,字典)、匿名函式遞迴函式
- 二元函式的極值與最值問題函式
- 表單驗證的3個函式ISSET()、empty()、is_numeric()的使用方法函式
- 淺談ASP.NET中檔案下載函式使用方法ASP.NET函式
- main函式的入口函式AI函式
- 仿函式是什麼?仿函式什麼時候必須繼承一元或者二元謂詞函式繼承