c++++ 友元函數是一種特殊函數,可訪問另一個類的私有和受保護成員。通過聲明友元函數,非成員函數可以與特定類交互。友元函數的應用包括操作符重載、i/o 操作和底層實現。例如,友元函數可被用來重載 + 運算符,支持自定義數據類型之間的運算,如以下案例所示:class vector { public: friend vector operator+(const vector& v1, const vector& v2); };
C++ 友元函數詳解:在面向對象設計中的應用
什么是友元函數?
在 C++ 中,友元函數是一種特殊的函數,它被授予訪問另一個類的私有和受保護成員的權限。這使得非成員函數可以與特定類進行交互,而不必聲明為該類的成員函數。
如何聲明友元函數?
有兩種方法可以聲明友元函數:
在類定義中聲明:
class MyClass {
friend void myFriendFunction();
};
登錄后復制使用 friend 關鍵字聲明:
class MyClass; // 前向聲明
void myFriendFunction() {
MyClass obj;
// 訪問 MyClass 的私有成員
}
登錄后復制
友元函數的應用
友元函數在面向對象設計中有多種應用,包括:
操作符重載:友元函數可以重載運算符,例如 + 和 *,以支持自定義數據類型之間的運算。I/O 操作:友元函數可以提供對類的 I/O 功能,例如 << 和 ,以簡化對象序列化。底層實現:友元函數可以訪問類的私有成員,以實現復雜的算法或內部數據結構。
實戰案例:操作符重載
以下代碼示例展示了如何使用友元函數來重載 + 運算符,以支持兩個 Vector 對象的加法:
class Vector {
int x, y;
public:
Vector(int _x, int _y) : x(_x), y(_y) {}
friend Vector operator+(const Vector& v1, const Vector& v2);
};
Vector operator+(const Vector& v1, const Vector& v2) {
return Vector(v1.x + v2.x, v1.y + v2.y);
}
int main() {
Vector v1(1, 2), v2(3, 4);
Vector v3 = v1 + v2; // 使用重載的 + 運算符
return 0;
}
登錄后復制
在上面的示例中,operator+ 函數是一個友元函數,它允許非成員函數訪問 Vector 類的私有數據成員 x 和 y。






