C++進階—>friend

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");
}







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章