01 全局函数做友元

02 类做友元

03 成员函数做友元

 01 全局函数做友元

#include<iostream>
using namespace std;
class Building
{
	//全局函数是Building的好朋友才可以访问Building私有成员
friend void gaybuilding(Building* b);

public:
	Building()
	{
		settingroom = "客厅";
		beddingroom = "卧室";
	}
public:
	string settingroom;
private:
	string beddingroom;
};

//全局函数
void gaybuilding(Building *b)
{
	cout << "正在访问基友的" << b->settingroom << endl;
	cout << "正在访问基友的" << b->beddingroom << endl;

}

void test() 
{
	Building b;
	gaybuilding(& b);
}
int main()
{
	test();
	system("pause");
	return 0;
}

02 类做友元

#include<iostream>
using namespace std;

//类做友元
class Building
{
	friend class Gay;

public:
	Building();
public:
	string settingroom;
private:
	string beddingroom;
};

class Gay
{
public:
	Gay();
	void visit(); //参观函数,访问Building的属性
	Building* b;	//Building类建立在前面可以这样写
};



//类外写成员函数
Building::Building()
{
	settingroom = "客厅";
	beddingroom = "卧室";
}

Gay::Gay()
{
	//创建建筑物对象
	b = new Building;
}

void Gay::visit()
{

	cout << "正在访问基友的" << b->settingroom << endl;
	cout << "正在访问基友的" << b->beddingroom << endl;

}

void test()
{
	Gay g;
	g.visit();
}

int main()
{
	test();

	system("pause");
	return 0;
}

03 成员函数做友元

#include<iostream>
using namespace std;

class Building;
class Gay
{
public:
	Gay();
	void visit1(); //让visit1函数可以访问building中私有成员
	void visit2(); //让visit2函数不可以访问building中私有成员

	Building *b;
};

// 类实现成员函数
class Building
{	//告诉编辑器 Gay类下的visit成员函数作为本类的好朋友,可以访问私有成员
	friend void Gay::visit1();
public:
	Building();
	string settingroom;

private:
	string bedroom;
};

Building::Building()
{
	settingroom = "客厅";
	bedroom = "卧室";
}
Gay::Gay()
{
	b = new Building;
}
void Gay::visit1()
{
	cout <<"visit1访问客厅" <<b->settingroom << endl;
	cout << "visit1访问卧室" << b->bedroom << endl;

}
void Gay::visit2()
{
	cout << "visit2访问客厅" << b->settingroom << endl;
}
void test()
{
	Gay g;
	g.visit1();
	g.visit2();
}
int main()
{
	test();
	system("pause");
	return 0;
}