友元函数 友元类 友元成员函数
友元
一般來說,類內的私有數據是對外不可見的,但在有些情況下,我們需要在類外對該類的私有數據進行訪問,這就需要用到一種新技術——友元(friend),即在聲明前添加關鍵字friend。
友元關系是單向的,即如果A是B的友元,但B不一定是A的友元;
友元關系無傳遞性,即如果A是B的友元,B是C的友元,但A不一定是C的友元。
1. 友元函數
友元函數是指某些非類成員函數,但可以訪問類內的私有數據。
#include <iostream> using namespace std;class A { private:int data; public:A() : data(1) {}friend void show( const A& t ); //添加friend定義友元函數 }; /* 友元函數在類外聲明時不加friend */ void show( const A& t ) {cout << "data = " << t.data << endl; }int main(void) { A a;show(a); return 0; }/*運行結果: data = 1*/2. 友元類
友元類是指若需要在類B中直接訪問類A的私有數據,因此將B作為A的友元(在A中聲明friend class B;)。
友元類中的成員函數、私有數據都可以在另一個類中被使用(即類B中可以直接使用類A的私有數據等)
3. 友元成員函數
友元成員函數是指類中的一個成員函數被定義為友元函數。
與友元類不同的是,只有友元成員函數可以在另一個中被使用,其余函數都不可以。
需要注意的是:
(1)類的前向聲明。由于在A中的print函數需要使用B,如果不進行B的前向聲明,編譯器就不知道B是一個類,會報錯。
(2)類的排列順序。在類B中會用到A的方法print(),因此需要先定義A,再定義B。
(3)友元成員函數的定義位置。友元成員函數不能使用內聯代碼,類中只能有函數聲明。函數定義需要放到類之后,在類外進行定義,而且必須放到另一個類定義的后面。(對上面代碼來說,若將A::print()的定義放在類B定義之前——示例位置1處,也會報錯,提示類B未完成)
對于友元的位置在何處生明,可以簡單記為friend在哪,哪個就可以被外面直接訪問。(friend在類A,A就可以被其他特定位置訪問)
總結
以上是生活随笔為你收集整理的友元函数 友元类 友元成员函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天蒂能用80SS路易斯毒王手套吗?有效果
- 下一篇: 继承与动态内存分配