訪問私有變數 友元函式 友元類

2021-08-25 19:45:36 字數 1698 閱讀 5123

**:友元函式、友元類、訪問私有資料成員、友元關係[c++]:

一 友元函式(friend function)

1. 什麼是友元函式?

乙個類的私有資料成員通常只能由類的函式成員來訪問,而友元函式可以訪問類的私有資料成員,也能訪問其保護成員

2. 友元函式的用處體現在**?

2.1 使用友元函式可提高效能,如:用友元函式過載操作符和生成迭代器類

2.2 用友元函式可以訪問兩個或多個類的私有資料,較其它方法使人們更容易理解程式的邏輯關係

3. 使用友元函式前應注意:

3.1 類的友元函式在類作用域之外定義,但可以訪問類的私有和保護成員

3.2 儘管類定義中有友元函式原型,友元函式仍然不是成員函式

3.3 由於友元函式不是任何類的成員函式,所以不能用控制代碼(物件)加點操作符來呼叫

3.4 public, private, protected成員訪問符與友員關係的宣告無關,因此友元關係宣告可在類定義的任何位置,習慣上在類定義的       開始位置

3.5 友元關係是指定的,不是獲取的,如果讓類b成為類a的友元類,類a必須顯式宣告類b為自己的友元類

3.6 友元關係不滿足對稱性和傳遞性

3.7 如果乙個友元函式想與兩個或更多類成為友元關係,在每個類中都必須宣告為友元函式

4. 注:由於c++屬於混合語言,常在同乙個程式中採用兩種函式呼叫且這兩種函式呼叫往往是相反的。類c語言的呼叫將  

基本資料或物件傳遞給函式,c++呼叫則是將函式(或資訊)傳遞給物件

例項1. 友元函式的宣告、定義與使用

#include using namespace std;

class car

};void display(car x) //友元函式的定義

friend void check(bacteria, virus); //類'bacteria'中,將check宣告為友元函式

};class virus

friend void check(bacteria, virus); //類'virus'中,將check宣告為友元函式

};void check (bacteria b, virus v) //友元函式的定義

if (b.life==1)

if (v.life==1)

}int main()

輸出結果:

something is alive.

a bacteria is alive.

二 友元類(friend class)

1. 友元類可以訪問與之為友元關係的類的所有私有成員

2. 友元類使用較少

例項: 友元類

#include using namespace std;

class add

friend class support; //類'support'現在是類'add'的朋友

};class support

{public:

void sum(add ob)//此函式可訪問類'add'的所有私有成員

{cout<<"the sum of the 2 members is : "<<(ob.x+ob.y)《輸出結果:

the sum of the 2 members is : 8

友元函式 友元類 訪問私有資料成員 友元關係

友元函式 friend function 1.什麼是友元函式?乙個類的私有資料成員通常只能由類的函式成員來訪問,而友元函式可以訪問類的私有資料成員,也能訪問其保護成員 2.友元函式的用處體現在 2.1 使用友元函式可提高效能,如 用友元函式過載操作符和生成迭代器類 2.2 用友元函式可以訪問兩個或多...

友元(友元函式 友元類 類成員函式的友元)

friend 友元機制 允許乙個類將對其非公有成員的訪問許可權授予指定的函式或者類。我們可以將友元大致分為3類 友元函式 是指某些雖然不是類的成員函式,但是能夠訪問這個類的所有成員的函式。比如我們下列的 include class test friend void show test rhs 宣告 ...

友元函式 友元類 友元成員

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