類的封裝性具有資訊隐藏的能力,它使外部函數隻能通過類的public成員函數才能通路類的private成員,但如果要多次通路,不僅操作麻煩,而且時間空間的開銷大。
友元機制允許一個類授權其他函數直接通路類的private和protected成員。
友元包括友元函數,友元類,友元成員函數,最常用的就是友元函數。
class X {
…
friend T f(…)
…
};
T f(…) {
…
}
因為友元函數不是類的成員函數,是以不能加上類名::。友元函數的參數一般都要有類對象。
說明:
1、友元函數不是類的成員函數,是以放在private,protected,public都是一樣的。
2、友元不具有逆向性和傳遞性。
一個類還可以是另一個類的友元,有緣類的所有成員函數都是另一個類的友元函數。
聲明類B是類A的友元類:
class A{
friend class B;
};
class B{
};