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