A---友元函數:函數
class Data{ public: ... friend int f(int &m);//友元函數 ... }
友元函數是能夠直接訪問類的私有成員的非成員函數。
它是定義在類外的普通函數,它不屬於任何類,但須要在類的定義中加以聲明,
聲明時只需在友元的名稱前加上關鍵字friend,其格式以下:spa
friend 類型 函數名(形式參數);blog
1.友元函數的聲明能夠放在類的私有部分,也能夠放在公有部分,它們是沒有區別的,都說明是該類的一個友元函數。繼承
2.一個函數能夠是多個類的友元函數,只須要在各個類中分別聲明。友元函數的調用與通常函數的調用方式和原理一致。io
B---友元類:function
class A{ ... public: friend class B; ... };
通過以上說明後,類B的全部成員函數都是類A的友元函數,能存取類A的私有成員和保護成員。class
注意:
(1) 友元關係不能被繼承。原理
(2) 友元關係是單向的,不具備交換性。若類B是類A的友元,類A不必定是類B的友元,要看在類中是否有相應的聲明。di
(3) 友元關係不具備傳遞性。若類B是類A的友元,類C是B的友元,類C不必定是類A的友元,一樣要看類中是否有相應的申明 參數
(4) 友元函數並不是類的成員函數,所以在類外定義的時候不能加上class::function name