首頁  >  文章  >  後端開發  >  C++ 友元函數詳解:如何使用友元函數進行跨類別存取?

C++ 友元函數詳解:如何使用友元函數進行跨類別存取?

王林
王林原創
2024-04-29 18:51:011112瀏覽

C 中的友元函數允許非成員函數存取類別的私有和受保護成員,在實現跨類別操作、ADT 和單元測試中十分有用:宣告友元函數:使用friend 關鍵字宣告一個類別外的函數。使用友元函數:直接存取類別的私有成員,就像它是一個成員函數一樣。實戰案例:使用友元函數取得私人年齡訊息,無需公開年齡屬性。

C++ 友元函数详解:如何使用友元函数进行跨类访问?

C 友元函數詳解:讓跨類別存取成為現實

在C 程式設計中,友元函數是一種強大的機制,它允許一個類別之外的函數存取類別的私有和受保護成員。這在某些情況下非常有用,例如:

  • 實作非成員函數對某些類別屬性的操作。
  • 跨類別實作抽象資料類型(ADT)。
  • 在 Unit 測試框架中,使用友元函數繞過存取限制來測試私有方法。

友元函數的宣告

class MyClass {
public:
    // ...
private:
    // ...
    friend void print_my_class(const MyClass&); // 声明友元函数
};

上面的程式碼宣告了 print_my_class 作為 MyClass 的友元函數。這意味著 print_my_class 函數可以存取 MyClass 的私有和受保護成員。

友元函數的使用

要使用友元函數,只需在友元函數中直接存取類別的私有成員即可:

void print_my_class(const MyClass& obj) {
    std::cout << "Private member: " << obj.private_member << std::endl;
    std::cout << "Protected member: " << obj.protected_member << std::endl;
}

實戰案例

假設我們有一個Person 類,表示一個人,它有一個私有的age 成員。我們想要建立一個友元函數get_age 來取得Person 物件的年齡:

class Person {
public:
    // ...
private:
    int age;
    friend int get_age(const Person&); // 声明友元函数
};

int get_age(const Person& person) {
    return person.age;
}

main 函數中,我們建立一個Person 物件並使用友元函數get_age 存取其私有成員:

int main() {
    Person person(25);
    std::cout << "Age: " << get_age(person) << std::endl;
    return 0;
}

輸出:

Age: 25

以上是C++ 友元函數詳解:如何使用友元函數進行跨類別存取?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn