(friend)友元機制:允許乙個類將對其非公有成員的訪問許可權授予指定的函式或者類。
我們可以將友元大致分為3類:
友元函式:是指某些雖然不是類的成員函式,但是能夠訪問這個類的所有成員的函式。
比如我們下列的**:
#include class test
friend void show(test &rhs);//宣告 你show這個函式 是 我test類的朋友了
private: //你可以訪問我的所有成員
int ma;
int mb;
};void show(test &rhs)
int main()
我們可以執行一下結果,看是否和我們預想的一致:
友元類:相當於友元函式的擴張版本,指你友元類的所有成員函式都是我這個類的友元函式,你所有的成員函式都可以訪問我這個類的所有成員,我對你沒有秘密。
應用:當希望乙個類可以訪問另乙個類的私有成員時,可以將該類宣告為另乙個類的友元類。
比如我們下列的**:
#include class link;
class node
private:
int mdata;
node* pnext;
friend class link;//宣告類link是類node的朋友
//指類link中的所有成員函式都可以訪問類node中的所有成員
};class link //友元類定義,為了可以訪問到類node中的成員
~link() }
void insert(int val)
void show()
std::cout << std::endl;
}private:
node* phead;
};int main()
link1.show();
return 0;
}
我們可以執行一下結果,看是否可以對類node進行訪問:
類成員函式的友元:相當於友元類的縮小版本,指乙個類中被宣告的特定成員函式可以訪問到另乙個類中的所有成員。
注意:當用到類成員函式的友元時,需要注意友元宣告與友元定義之間的相互依賴,比如下面這個例子,類b必須先定義好,才能定義類a的該友元成員函式。
比如我們下列的**:
#include class b; //當用到友元成員函式時,需要注意友元宣告與友元定義之間的相互依賴。這時類b的宣告
class a
;class b
friend void a::show(b &rhs); //這裡宣告該函式a::show是類b的友元成員函式
private:
int ma;
int mb;
};void a::show(b &rhs) //這裡才是友元成員函式的定義
int main()
我們可以執行一下結果,看是否函式a::show可以對類b進行訪問:
至此,友元的基礎概念複習完畢。
友元函式 友元類 友元成員函式
注意友元成員函式定義的3個步驟 include include include using namespace std class a class c class a class b void c display const a a 3.最後定義display,此時才可以使用a的私有成員 void ...
友元函式 友元類 友元成員函式
一般來說,類內的私有資料是對外不可見的,但在有些情況下,我們需要在類外對該類的私有資料進行訪問,這就需要用到一種新技術 友元 friend 即在宣告前新增關鍵字friend。友元關係是單向的,即如果a是b的友元,但b不一定是a的友元 友元關係無傳遞性,即如果a是b的友元,b是c的友元,但a不一定是c...
友元函式 友元類 友元成員函式
有些情況下,允許非成員函式訪問類中的私有成員,但又阻止一般的訪問,這種情況,就需要用到友元。使用friend宣告友元,友元的定義只能在類的內部 有些情況下,全域性函式需要訪問類中的私有成員,這種函式叫友元函式 如 客人可以訪問客廳,但一般客人不可以去主人臥室,關係較好的朋友才能訪問私有的臥室,這時就...