首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 友元詳解:友元函數、友元類、友元成員函數

     編輯:C++ 入門

核心概念

友元機制打破封裝,允許類外函數或類訪問類的 private/protected 成員。友元聲明在類內部,不受訪問控制限制。

三種形式

1. 普通函數為友元

class A {
    int id;
    friend void display(A& a); // 聲明
};
void display(A& a) { cout << a.id; } // 定義可訪問私有成員

2. 友元類

class A { int id; friend class B; };
class B {
public:
    static void show(A& a) { cout << a.id; } // B 所有成員可訪問 A 私有
};

3. 友元成員函數

需前置聲明類,再在類內聲明具體成員函數為友元。

class A; // 前置聲明
class B {
public:
    void showA(A& a);
};
class A {
    int id;
    friend void B::showA(A& a); // 開放給 B::showA
};
void B::showA(A& a) { cout << a.id; } // 定義在 A 完整定義後

重要規則

  • 友元不屬於類的成員,不具備 this 指針。
  • 友元聲明位置不影響效果(public/private/protected 區域均可)。
  • 友元關係不可傳遞(A 友元 B,B 友元 C ⇏ A 友元 C)。
  • 友元關係不可繼承(基類友元不自動成為派生類友元)。

適用場景

  • 運算符重載(如 operator<< 需訪問私有成員)。
  • 緊密協作的類之間(如容器與迭代器)。
  • 效率關鍵、需直接訪問內部表示的情況。

慎用:過度使用破壞封裝,增加耦合。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved