C++ 類的友元機制解讀
下面給出C++類的友元機制說明(對類private、protected成員訪問),需要註意的是,友元機制盡量不用或者少用,雖然它會提供某種程度的效率,但會帶來數據安全性的問題。
類的友元
友元是C++提供的一種破壞數據封裝和數據隱藏的機制。
通過將一個模塊聲明為另一個模塊的友元,一個模塊能夠引用到另一個模塊中本是被隱藏的信息。可以使用友元函數和友元類。
為瞭確保數據的完整性,及數據封裝與隱藏的原則,建議盡量不使用或少使用友元。
友元函數
友元函數是在類聲明中由關鍵字friend修飾說明的非成員函數,在它的函數體中能夠通過對象名訪問 private 和protected成員
作用:增加靈活性,使程序員可以在封裝和快速性方面做合理選擇。
訪問對象中的成員必須通過對象名。
舉例說明:使用友元函數計算兩點間的距離
#include <iostream> #include <cmath> using namespace std; class Point {//Point類聲明 public: //外部接口 Point(int x=0, int y=0) : x(x), y(y) { } int getX() { return x; } int getY() { return y; } friend float dist(Point &a, Point &b); private: //私有數據成員 int x, y; }; float dist( Point& a, Point& b) { double x = a.x - b.x; double y = a.y - b.y; return static_cast<float>(sqrt(x * x + y * y)); } int main() { Point p1(1, 1), p2(4, 5); cout <<"The distance is: "; cout << dist(p1, p2) << endl; return 0; }
友元類
若一個類為另一個類的友元,則此類的所有成員都能訪問對方類的私有成員。
聲明語法:將友元類名在另一個類中使用friend修飾說明。
類的友元關系是單向的
如果聲明B類是A類的友元,B類的成員函數就可以訪問A類的私有和保護數據,但A類的成員函數卻不能訪問B類的私有、保護數據。
以上就是C++ 類的友元機制解讀的詳細內容,更多關於C++ 類的友元機制的資料請關註WalkonNet其它相關文章!