[C++]【類】友元的三種宣告及注意事項
class A{
friend void fri_fun(A);
private:
int a=9;
};
void fri_fun(A aa){
cout<<aa.a<<endl;
}
在程式碼中,我們在類 A 中聲明瞭函式 fri_fun ,並以 friend 關鍵字加以說明,此時我們可以在函式 fri_fun 中訪問 A 類的私有成員。
友元的宣告僅僅指定了訪問的許可權,而非一個通常意義上的函式宣告。如果我們希望類的使用者能過呼叫某個友元函式,那麼我們就必須在友元宣告之外再專門對函式進行宣告。
一些編譯器允許在尚無友元函式的初始宣告的情況下就呼叫它。即使這樣,也最好還是提供一個獨立的函式宣告。
二、友元類
友元類也需要 friend 關鍵字加以說明。
例如:
class B{
friend class A;
int s=9;
};
class A {
public:
void aa(B c) {
cout << c.s << endl;
}
};
類 A 的成員函式可以訪問類 B 的私有成員。
注意:如果我們把類 A 放在類 B 的前邊,此時編譯會出錯,因為在編譯類 A 時,我們並沒有定義類 B。
我們也可以將成員函式作為另一個類的友元,我們將上一個程式碼更改,僅僅讓類 A 的成員函式 aa 可以訪問類 B 的私有成員:
class B;
class A{
public:
void aa(B c);
};
class B{
friend void A::aa(B);
int s=9;
};
void A::aa(B c){
std::cout << c.ss << std::endl;
}
我們將類 A 的成員函式 aa 作為類 B 的友元函式,這是我們必須在類 B 之前宣告函式 aa (我們的程式碼,在類 A 中已經宣告),在類 B 之後定義(如果用到類 B 的成員),在友元宣告中我們必須指明該函式屬於哪一個類。
在類 A 中,成員函式 aa 的形參包含 B 類型別元素,所以在類 A 之前,必須有類 B 的前