1. 程式人生 > >友元函數友元類.

友元函數友元類.

log mod http eache src con 類對象 之間 封裝

友元能夠理解為是類的“朋友”。它能夠訪問類的保護和私有成員。友元的作用在於提高程序的執行效率,可是,它破壞了類的封裝性和隱藏性。友元能夠是一個函數,該函數被稱為友元函數;友元也能夠是一個類,該類被稱為友元類。

一、友元函數

友元函數是在類外定義的一個函數,不是類的成員函數。

這個函數能夠是普通的C++函數,或者是其它類的成員函數。即普通友元函數和友元成員函數。友元函數是定義在類外部。但須要在類體內進行說明,為了與該類的成員函數加以差別。在說明時前面加以keywordfriend。友元函數能夠訪問類中的保護和私有成員

註:友元函數僅僅是打破了類的訪問權限。但要訪問類成員還是須要依靠類對象進行,不能與類的繼承混了。

二、友元函數的定義

普通友元函數的定義:

friend 類型標識符 友元函數名(參數列表)。

友元成員函數(即將其他類的成員函數聲明為該類的友元函數)的定義:

friend 類型標識符 其它類名 :: 友元函數名(參數列表);

註:1、frinedkeyword僅僅須要在類聲明時加。定義時不須要加。

2、能夠將一個普通的全局函數聲明為類的友元函數。也能夠將還有一個類的成員函數聲明為此類的友元。

如:friend void CStore::f2(int y); //在以引用其他類定義時,須要在本類定義前對其進行聲明,如 class CStore;

三、友元函數與類之間的關系

技術分享

詳細實例:

youyuan1.cpp //普通函數作為友元

友元類函數:

Class Cstudent; //此處特別重要。Cstudent類在此之前並未聲明。此句稱為提前引用聲明,目的是讓編譯器知道Cstudent類的名字已經登記在冊了。後面能夠引用這個名字。

Class CTeacher

{

public:

//教師的成員函數,改動某學生的成績

void ChangeGrades(Cstudent &s);

private

}

void CTeacher ::ChangeGrades(Cstudent &s)

{ //友元成員函數訪問私有成員

s. Grade[0]=78;

}

Class Cstudent

{

public:

//將教師類的成員函數說明為學生類的友元函數

friend void CTeacher::ChangeGrades(Cstudent &s);

private

int Grade[3];

};

四、友元類

一、友元類

一個類能夠作還有一個類的友元稱為友元類。

當一個類作為還有一個類的時,意味著這個類的全部成員函數都是還有一個

類的友元函數,能夠訪問還有一個類的私有成員

二、聲明友元類的語法形式

friend class 類名;

比如:將A類聲明為B類的友元類

Class B

{

……

friend class A; // 聲明A為B的友元類

……

};

註意:

友元關系不具有交換性,即是單向的;

友元關系不具有傳遞的。

友元函數友元類.