友元是c还是java_[C++]【类】友元的三种声明及注意事项
類允許其他類或者函數(shù)訪問(wèn)它的非公有成員,但我們需要將訪問(wèn)類非公有成員的其他類或者函數(shù)成為它的友元。
一、友元函數(shù)
如果類想要把一個(gè)函數(shù)作為他的友元,只需要增加一條以 friend 關(guān)鍵字開(kāi)始的函數(shù)聲明語(yǔ)句即可。
例如:
class A{
friend void fri_fun(A);
private:
int a=9;
};
void fri_fun(A aa){
cout<
}
在代碼中,我們?cè)陬?A 中聲明了函數(shù) fri_fun ,并以 friend 關(guān)鍵字加以說(shuō)明,此時(shí)我們可以在函數(shù) fri_fun 中訪問(wèn) A 類的私有成員。
友元的聲明僅僅指定了訪問(wèn)的權(quán)限,而非一個(gè)通常意義上的函數(shù)聲明。如果我們希望類的用戶能過(guò)調(diào)用某個(gè)友元函數(shù),那么我們就必須在友元聲明之外再專門對(duì)函數(shù)進(jìn)行聲明。
一些編譯器允許在尚無(wú)友元函數(shù)的初始聲明的情況下就調(diào)用它。即使這樣,也最好還是提供一個(gè)獨(dú)立的函數(shù)聲明。
二、友元類
友元類也需要 friend 關(guān)鍵字加以說(shuō)明。
例如:
class B{
friend class A;
int s=9;
};
class A {
public:
void aa(B c) {
cout << c.s << endl;
}
};
類 A 的成員函數(shù)可以訪問(wèn)類 B 的私有成員。
注意:如果我們把類 A 放在類 B 的前邊,此時(shí)編譯會(huì)出錯(cuò),因?yàn)樵诰幾g類 A 時(shí),我們并沒(méi)有定義類 B。
我們也可以將成員函數(shù)作為另一個(gè)類的友元,我們將上一個(gè)代碼更改,僅僅讓類 A 的成員函數(shù) aa 可以訪問(wèn)類 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 的成員函數(shù) aa 作為類 B 的友元函數(shù),這是我們必須在類 B 之前聲明函數(shù) aa (我們的代碼,在類 A 中已經(jīng)聲明),在類 B 之后定義(如果用到類 B 的成員),在友元聲明中我們必須指明該函數(shù)屬于哪一個(gè)類。
在類 A 中,成員函數(shù) aa 的形參包含 B 類類型元素,所以在類 A 之前,必須有類 B 的前向聲明。
總結(jié)
以上是生活随笔為你收集整理的友元是c还是java_[C++]【类】友元的三种声明及注意事项的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: (多源转化成单源dijsktra)一个人
- 下一篇: (模拟+floyd)Saving Jam