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
。