是的,友元函數可以被重載,與其他函數一樣,重載的友元函數必須具有不同的參數列表,如範例中的Vector3D 類,它具有重載的友元函數operator ()和operator-(),允許對Vector3D 物件應用加法和減法運算子。
C 友元函數與重載的關係
友元函數
友元函數是一個特殊類型的函數,可以存取其他類別的私有成員。換句話說,它不是類別的成員函數,但具有與成員函數相同的存取權限。
定義友元函數:
class ClassName { // ... friend function_name(); };
重載
重載是允許在同一作用域內建立同名但具有不同參數列表的多個函數。這意味著當呼叫重載函數時,編譯器將根據參數決定要呼叫哪個函數。
友元函數與重載的互作用
友元函數可以被重載。與其他函數類似,重載的友元函數必須具有不同的參數列表。
實戰案例
範例類別:
class Vector3D { double x, y, z; public: Vector3D(double x, double y, double z) : x(x), y(y), z(z) {} friend Vector3D operator+(const Vector3D& lhs, const Vector3D& rhs); friend Vector3D operator-(const Vector3D& lhs, const Vector3D& rhs); };
重載的友元函數:
Vector3D operator+(const Vector3D& lhs, const Vector3D& rhs) { return Vector3D(lhs.x + rhs.x, lhs.y + rhs.y, lhs.z + rhs.z); } Vector3D operator-(const Vector3D& lhs, const Vector3D& rhs) { return Vector3D(lhs.x - rhs.x, lhs.y - rhs.y, lhs.z - rhs.z); }
使用:
Vector3D v1(1, 2, 3), v2(4, 5, 6); Vector3D v3 = v1 + v2; // 调用重载的友元函数 operator+() Vector3D v4 = v1 - v2; // 调用重载的友元函数 operator-()
在這個範例中,我們定義了一個Vector3D
類別及其重載的友元函數operator ()
和operator-()
。這些友元函數允許我們對 Vector3D
物件使用加法和減法運算子。
以上是C++ 友元函式與重載的關係的詳細內容。更多資訊請關注PHP中文網其他相關文章!