C++ 資料共享與保護
類的友元
友元是C++提供的一種破壞資料封裝和資料隐藏的機制。
友元函數
友元函數是在類的聲明中由friend 修飾的非本類成員函數,在友元函數中可以通過對象通路它們的成員。
#include <iostream>
using namespace std;
class B {
public: int j = 11;
};
class A {
int i=10;
friend void fun(A & a, B & a1)
{
cout << a.i + a1.j << endl;//此處出現了a1.j
//則B類的定義必須出現在A類的前面
}
};
int main() {
A a;
B a1;
fun(a,a1);//友元函數不屬于類,直接調用;
return 0;
}
友元類
若A類為B類的友元類,則A類的所有成員函數都是B類的友元函數,都能通路B類的任何成員
class A{
friend B;B為A的友元
}
class A
{ friend class B;
public:
void Display()
{cout<<x<<endl;}
private:
int x;
};
class B
{ public:
void Set(int i);
void Display();
private:
A a;
};
void B::Set(int i)
{a.x=i;}
void B::Display()
{a.Display();}
int main()
{ B b;
b.Set(1);
b.Display();
return 0;
}
說明:
(1)友元函數的聲明可以出現在類的任何地方,即友元的聲明不受成員通路控制符的限制。
(2)友元關系是單向的。
(3)友元關系是不能傳遞的。
(4)友元關系不能被繼承。
(5)實際工作中,除非有必要,一般不把整個類聲明為友元類。