/*
生活中你的家有客廳(Public),有你的臥室(Private)
客廳所有來的客人都可以進去,但是你的臥室是私有的,也就是說只有你能進去
但是呢,你也可以允許你的好閨蜜好基友進去。
在程序裏,有些私有屬性 也想讓類外特殊的一些函數或者類進行訪問,就需要用到友元的技術
友元的目的就是讓一個函數或者類 訪問另一個類中私有成員
*/
#include<iostream>
#include<string>
using namespace std;
class MyFamily;//先進行類的聲明
class GoodFriend
{
public:
GoodFriend();
void visit();
private:
MyFamily *myfamily;
};
class MyFamily
{
//告訴c++編譯器。goodFriend類是MyFamily類的好朋友。可以訪問MyFamily類中的私有屬性
friend class GoodFriend;
//友元函數可以聲明在public裏面,也可以寫在外面,表示這個函數不屬於這個類。
public:
MyFamily(string sittingroom, string bedroom)
{
this->sittingroom = sittingroom;
this->bedroom = bedroom;
}
private:
string sittingroom;
string bedroom;
};
//這個函數的實現必須放在類MyFamily中的定義之後,放在前面的聲明後不行
GoodFriend::GoodFriend()
{
myfamily = new MyFamily("客廳", "臥室");//此處調用myFamily類對象的構造函數
}
void GoodFriend::visit()
{
cout << "正在訪問私有屬性" << myfamily->sittingroom << endl;
cout << "正在訪問私有屬性" << myfamily->bedroom << endl;
}
void playObject()
{
GoodFriend gf1;
gf1.visit();
}
int main(void)
{
playObject();
system("pause");
return 0;
}
/*
*
* 創建一個家庭類,家庭類有私有屬性臥室和客廳,
* 創建好朋友類,好朋友方法visit訪問家庭類的私有屬性。
* 訪問誰的私有屬性,就把要訪問的類對象聲明爲私在誰的裏面進行聲明friend
* GoodFriend類對象要包含一個MyFamily類對象或者指針。
*/