友元是c还是java_[C++]【类】友元的三种声明及注意事项
類允許其他類或者函數訪問它的非公有成員,但我們需要將訪問類非公有成員的其他類或者函數成為它的友元。
一、友元函數
如果類想要把一個函數作為他的友元,只需要增加一條以 friend 關鍵字開始的函數聲明語句即可。
例如:
class A{
friend void fri_fun(A);
private:
int a=9;
};
void fri_fun(A aa){
cout<
}
在代碼中,我們在類 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 的前向聲明。
總結
以上是生活随笔為你收集整理的友元是c还是java_[C++]【类】友元的三种声明及注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (多源转化成单源dijsktra)一个人
- 下一篇: s3c2440移植MQTT