07友元

惡魔布發表於2020-11-30

友元介紹

友元 : 允許非類成員函式訪問類的非公有成員

  • 友元函式 - 宣告: friend 型別 友元函式名(引數)
  • 友元類 - 宣告: friend class 友元類名

友元函式

類體進行宣告,可以在類外進行定義,作用域在類體外

  • 提高程式執行效率
class Test
{
	friend void friFun(const Test& t1, const Test& t2); //可以放在private,protected,public成員中
public:
	Test();
private:
	int x_;
	int y_;
};

void friFun(const Test& t1, const Test& t2)
{
	cout << t1.x_ << endl;
}

友元函式注意事項

  1. 友元函式不是類的成員函式,可以訪問類的任意成員
  2. 可以把友元函式放在private,public,protected中,結果一樣
  3. 作用域並非該類,如果是另外一個類的成員函式,作用域為另外一個類,否則與一般函式的作用域相同
  4. 儘可能少用

友元類

友元類的所有成員函式都是另外一個類的友元函式

  • 如果兩個類分別放在不同的檔案中,可以加入另外一個類的標頭檔案,或者用前向宣告
// friend_class.h
#ifndef _TEST_H_
#define _TEST_H_

class FriClass;	//前向宣告
//或者包含標頭檔案
//#include "friclass.h"

class Test
{
	friend class FriClass; 
public:
	Test();
};

#endif

友元類注意事項

  • 友元關係是單向的
  • 不能傳遞
  • 不能繼承