【C++ 07】類和對象-友元

目錄

1 全局函數做友元

2 類做友元

3 成員函數做友元


在程序中有些私有屬性,也想讓類外特殊的一些函數或者類進行訪問,這就需要用到友元技術,友元的目的就是讓一個函數或者類訪問另外一個類中的私有成員。

友元的關鍵字爲friend

友元的三種實現方式:

  1. 全局函數做友元
  2. 類做友元
  3. 成員函數做友元

1 全局函數做友元

class Building
{
	//goodGay全局函數是Building的好朋友,可以訪問Building 中的私有成員
	friend void goodGay(Building* building); 
public:
	Building()
	{
		m_SittingRoom = "keting";
		m_Bedroom = "woshi";
	}
public:
	string m_SittingRoom;

private:
	string m_Bedroom;
};

//全局函數

void goodGay(Building *building)
{
	cout << "好基友全局函數 正在訪問" << building->m_SittingRoom << endl;
	cout << "好基友全局函數 正在訪問" << building->m_Bedroom << endl;

}

2 類做友元

class Building
{
	friend class GoodGay;
public: 
	Building();
public:
	string m_SittingRoom;

private:
	string m_BadRoom;
};
//類外寫成員函數
Building::Building()
{
	m_SittingRoom = "客廳";
	m_BadRoom = "臥室";
}

class GoodGay
{
public:
	GoodGay();
public:
	void visit();//參觀函數,訪問Building中的屬性;
	Building* building;
};
GoodGay::GoodGay()
{
	building = new Building;
}

void GoodGay::visit()
{
	cout << "好基友正在訪問你的" << building->m_SittingRoom << endl;
	cout << "好基友正在訪問你的" << building->m_BadRoom << endl;
}
void test01()
{
	GoodGay gg;
	gg.visit();
}
int main()
{
	test01();
	

	system("pause");
	return 0;
}

3 成員函數做友元

class Building;
class GoodGay
{
public:
	GoodGay();
public:
	void visit();//參觀函數,訪問Building中的屬性;
	void visit1(); 
	Building* building;
};

class Building
{
	friend void GoodGay::visit();
public:
	Building();
public:
	string m_SittingRoom;

private:
	string m_BadRoom;
};

Building::Building()
{
	m_SittingRoom = "客廳";
	m_BadRoom = "臥室";
}

GoodGay::GoodGay()
{
	building = new Building;
}
void GoodGay::visit()
{
	cout << "好基友正在訪問你的" << building->m_SittingRoom << endl;
	cout << "好基友正在訪問你的" << building->m_BadRoom << endl;
}
void GoodGay::visit1()
{
	cout << "好基友正在訪問你的" << building->m_SittingRoom << endl;
	//cout << "好基友正在訪問你的" << building->m_BadRoom << endl;
}

Building的順序很重要,需要先聲明Building,再定義GoodGay

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