友元函數友元類.
友元能夠理解為是類的“朋友”。它能夠訪問類的保護和私有成員。友元的作用在於提高程序的執行效率,可是,它破壞了類的封裝性和隱藏性。友元能夠是一個函數,該函數被稱為友元函數;友元也能夠是一個類,該類被稱為友元類。
一、友元函數
友元函數是在類外定義的一個函數,不是類的成員函數。
這個函數能夠是普通的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的友元類
……
};
註意:
友元關系不具有交換性,即是單向的;
友元關系不具有傳遞的。
友元函數友元類.