1. 程式人生 > 其它 >C++:類的友元

C++:類的友元

技術標籤:C++c++

類的友元

友元是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修飾說明。

class A {
	friend class B;
	public:
	void display() {
	cout << x << endl;
	}
	private:
	int x;
};
class B {
	public:
	void set(int i);
	void display();
	private:
	A a;
};
void B::set(int i) {
	a.x=i;
}
void B::display() {
	a.display();
};

類的友元關係是單向的
如果宣告B類是A類的友元,B類的成員函式就可以訪問A類的私有和保護資料,但A類的成員函式卻不能訪問B類的私有、保護資料。