C++類的友元機制說明

  下面給出C++類的友元機制說明(對類private、protected成員訪問),須要注意的是,友元機制儘可能不用或者少用,雖然它會提供某種程度的效率,但會帶來數據安全性的問題。ios

類的友元

  友元是C++提供的一種破壞數據封裝和數據隱藏的機制。程序員

  經過將一個模塊聲明爲另外一個模塊的友元,一個模塊可以引用到另外一個模塊中本是被隱藏的信息。能夠使用友元函數和友元類。安全

  爲了確保數據的完整性,及數據封裝與隱藏的原則,建議儘可能不使用或少使用友元。函數

友元函數

  友元函數是在類聲明中由關鍵字friend修飾說明的非成員函數,在它的函數體中可以經過對象名訪問 private protected成員spa

  做用:增長靈活性,使程序員能夠在封裝和快速性方面作合理選擇。code

  訪問對象中的成員必須經過對象名。對象

舉例說明:使用友元函數計算兩點間的距離

 1 #include <iostream>
 2 
 3 #include <cmath>
 4 
 5 using namespace std;
 6 
 7 class Point
 8 {//Point類聲明
 9 
10     public: //外部接口
11 
12         Point(int x=0, int y=0) : x(x), y(y) { }
13 
14         int getX() { return x; }
15 
16         int getY() { return y; }
17 
18         friend float dist(Point &a, Point &b);
19 
20     private: //私有數據成員
21 
22         int x, y;
23 
24 };
25 
26 float dist( Point& a, Point& b)
27 {
28     double x = a.x - b.x;
29 
30     double y = a.y - b.y;
31 
32     return static_cast<float>(sqrt(x * x + y * y));
33 
34 }
35 
36 int main()
37 {
38 
39     Point p1(1, 1), p2(4, 5);
40 
41     cout <<"The distance is: ";
42 
43     cout << dist(p1, p2) << endl;
44 
45     return 0;
46 
47 }

友元類

  若一個類爲另外一個類的友元,則此類的全部成員都能訪問對方類的私有成員。blog

  聲明語法:將友元類名在另外一個類中使用friend修飾說明。接口

類的友元關係是單向的

  若是聲明B類是A類的友元,B類的成員函數就能夠訪問A類的私有和保護數據,但A類的成員函數卻不能訪問B類的私有、保護數據。get

相關文章
相關標籤/搜索