天天看點

C++:友元(非成員友元函數、成員友元函數、友元類)

 3.8  友元:友元函數和友元類 

 友元函數 :既可以是不屬于任何類的非成員函數,也可以是另一個類的成員函數,統稱為友元函數。友元函數不是目前類的成員函數,而是獨立于類的外部函數,但它可以通路該類所有的成員,包括私有成員、保護成員和公有成員。在類中聲明友元函數時,需在其函數名前加上關鍵字friend,此聲明可以放在公有部分、也可以放在保護和私有部分。友元函數可以定義在類部,也可以定義在類的外部。

3.8.1 将非成員函數聲明為友元函數

C++:友元(非成員友元函數、成員友元函數、友元類)
C++:友元(非成員友元函數、成員友元函數、友元類)

例1:非成員友元函數

C++:友元(非成員友元函數、成員友元函數、友元類)
C++:友元(非成員友元函數、成員友元函數、友元類)

例2:非成員友元函數

C++:友元(非成員友元函數、成員友元函數、友元類)
C++:友元(非成員友元函數、成員友元函數、友元類)

3.8.2将成員函數聲明為友元函數

除了一般的非成員函數可以作為某個類的友元外,一個類的成員函數也可以作為另一個類的友元,它是友元函數中的一種,成為友元成員函數。友元成員函數不僅可以通路自己所在類對象中的私有成員和公有成員,還可以通路friend聲明語句所在類對象中的所有成員。

例3.35 一個類的成員函數作為另一個類的友元函數

C++:友元(非成員友元函數、成員友元函數、友元類)
C++:友元(非成員友元函數、成員友元函數、友元類)

3.8.3 友元類

不僅函數可以作為一個類的友元,一個類也可以作為另一個類的友元,稱為友元類。友元類

的說明方法是在另一個類聲明中加入語句。

friend class 類名;

此類名是友元類的類名。這條語句可以放在公有部分,也可以放在私有部分。例如,

class Y{

      ...

};

class X{

friend class Y; //聲明類Y是類X的友元類 

當類Y被說明類X的友元時,類Y的所有成員函數都成為類X的友元函數,這就意味着作為

友元類Y中的所有成員函數都可以通路類X中的所有成員(包括私有成員)。

下面的例子中,聲明了兩個類Boy和Gril,類Boy聲明為類Gril的友元,是以類Boy的成員

函數都能成為類Gril的友元函數,它們都可以通路類Gril的私有成員。

例 3.36 友元類的應用

C++:友元(非成員友元函數、成員友元函數、友元類)
C++:友元(非成員友元函數、成員友元函數、友元類)

注意:聲明一個類A為另一個類B的友元類(則類A的所有成員函數都是類B的友元函數,友元類A的所有成員函數既可以通路自己本類的所有成員,也可以通路類B的所有成員)

C++:友元(非成員友元函數、成員友元函數、友元類)
C++:友元(非成員友元函數、成員友元函數、友元類)

程式猿神奇的手,每時每刻,這雙手都在改變着世界的互動方式!

本文轉自當天真遇到現實部落格園部落格,原文連結:http://www.cnblogs.com/XYQ-208910/p/4912261.html,如需轉載請自行聯系原作者

繼續閱讀