C 物件導向 友元函式和友元類

2021-10-18 11:07:45 字數 2516 閱讀 1293

2.友元函式的另一種實現

3.友元類

4.為什麼會有友元函式

class

person

;void

print

(person& a)

對於上面的person類,內部有privateprotectedpublic的三類訪問許可權的成員。寫乙個外部函式print()來列印這三類成員,則print()可以訪問public的,但是protectedprivate的無法訪問。

如果我們要讓print()也可以訪問protectedprivate的成員,方法之一就是將print()挪到print()類內部使其成為成員函式,但是這樣print()就不是外部函式了,這個時候這個方法就不合適了。而友元函式可以解決上面說的問題。

對於上面的需求:在外部函式訪問內部私有或者保護成員,可以通過將外部函式print()宣告為print()類的友元函式來解決。語法上的要求是將該函式在類內宣告,宣告需要加上friend關鍵字修飾,

舉個栗子:

class

person

;person

(string name,

int age,

int height)

private

:int age;

protected

:int height;};

void

print

(person& a)

友元函式的一種實現就是上面需求中的外部函式。

友元函式的另一種實現為:在另乙個類中的成員函式(也叫友元成員,友元成員方法,友元成員函式)

#include

#include

using

namespace std;

//類的前置宣告

class

food

;class

person

;person

(string name)

:name

(name)

;void

eat(food&tmp);}

;class

food

;food

(string name)

:name

(name)

;friend

void person::

eat(food&tmp)

;private

:int x;

protected

:int y;};

void person::

eat(food&tmp)

intmain

(void

)

總結:

理解編譯器的工作原理和「脾氣」,很多事自然就很簡單了。在設計多個類的體系時,盡量設計好層次關係成單向的,盡量避免互相引用的情況

將類a宣告為b中的友元類後,則a中所有成員函式都成為類b的友元函式了。要注意:友元類的定義和使用友元類是單向的。

舉個栗子:

#include

#include

using

namespace std;

class

food

;food

(string name)

:name

(name)

;//在food類中宣告友元類person

friend

class

person

;private

:int x;

protected

:int y;};

class

person

;person

(string name)

:name

(name)

;void

eat(food&tmp)};

intmain

(void

)

兩個個類可以互為友元類,互為友元類要注意互相引用的細節規則。

運算子過載使用方法參考:[c++學習筆記:運算子過載]。

並非所有運算子過載都可用友元函式,有四個運算子 =, ->, , ()就不可以。

類內的資料其實就是類的成員變數。

2個類共享資料方法(準確的說是兩個物件交換資料):

友元 友元函式 友元類和友元成員函式 C

有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...

友元 友元函式 友元類和友元成員函式 C

有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...

C 友元 友元函式 友元類和友元成員函式

有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...