0.前言
friend友元,顧名思義是好朋友的意思,即我是你的好朋友,你所私有的東西會跟我分享,爲我所用;通常分爲友元函數和友元類。
1.友元函數
1)友元函數能夠訪問類中的私有變量;
2)友元函數可以定義在類中的任何位置,public、protected、private中均可;
3)友元函數爲全局函數,在實現中無需加上類標識;
4)函數參數爲類的對象,以便對類成員進行操作;
5)常用於對運算符或系統函數的重載。
說明:若要定義某個函數能夠實現對某類變量操作,不管該函數是系統函數還是其他函數,均可通過在某類中使用friend關鍵字 定義友元函數,通過該友元函數可以實現對某類的操作,在友元函數的參數爲類對象。
例子:
class AB
{
public:
AB()
{
this->a=888;
this->b=666;
}
AB(int a,int b)
{
this->a=a;
this->b=b;
}
friend void modifya(AB &ab);
//void modifyb(AB &ab);
void Print()
{
cout<<a<<b<<endl;
}
private:
int a ;
int b ;
};
void modifya(AB &ab)
{
ab.a=88;
}
void main()
{
AB aaa;
modifya(aaa);
aaa.modifyb(aaa);
aaa.Print();
system("pause");
return;
}
2.友元類
1)若B類是A類的友員類,則B類的所有成員函數都是A類的友員函數;
2)友員類通常設計爲一種對數據操作或類之間傳遞消息的輔助類;
3)友元類中需要定義類對象,如B類是A類的友員類,則B中要定義一個A的對象,以便對A進行操作。
例子:
class A
{
public:
friend class B;//B類 是 A的好朋友 ,在B中可以訪問A類的私有成員 私有函數
//1 聲明的位置 和 public private沒有關係
friend void modifyA(A *pA, int _a); //2 函數modifyA 是 類A的好朋友
A(int a=0, int b=0)
{
this->a = a;
this->b = b;
}
int getA()
{
return this->a;
}
private:
int a;
int b;
};
//
void modifyA(A *pA, int _a)
{
//pA->a = 100;
pA->a = _a;
}
//
class B
{
public:
void Set(int a)
{
Aobject.a = a;
}
void printB()
{
cout<<Aobject.a <<endl;
}
private:
A Aobject;
};
void main()
{
B b1;
b1.Set(300);
b1.printB();
system("pause");
}