C++:類的友元
阿新 • • 發佈:2021-01-19
類的友元
友元是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類的私有、保護資料。