C++类和对象——友元详解

目录

1.友元是什么

2.全局函数做友元 

3.友元类 

类外写成员函数

4.成员函数做友元 

1.友元是什么

在生活中,我们的家里有客厅也有卧室

客人都能进出你家的客厅,但不能进入你家的卧室

但只要你允许,你也可以让自己的好朋友进入你的卧室

C++类和对象——友元详解_第1张图片

友元的关键字为 friend

C++类和对象——友元详解_第2张图片

2.全局函数做友元 

代码示例:

#include
using namespace std;

class home
{
	
	friend void my_good_friend(home *h);
	//my_good_friend全局函数是home的好朋友
	//可以访问home中的私有成员
	
public:
	home()
	{
		my_sittingroom = "客厅";
		my_bedroom = "卧室";
	}
		
public:
	string my_sittingroom;
		
private:
	string my_bedroom;
		
};

void my_good_friend(home *h)
{
	cout << "你的好朋友正在访问你的" << h -> my_sittingroom << endl;
	cout << "你的好朋友正在访问你的" << h -> my_bedroom << endl;
}

int main(){
	home h;
	my_good_friend(&h);
	return 0;
}

C++类和对象——友元详解_第3张图片

3.友元类 

类外写成员函数

代码示例:

#include
using namespace std;

class home
{
	friend class good_friend;
	
public:
	home();
public:
	string my_sittingroom;
	
private:
	string my_bedroom;
};

class good_friend
{
public:
	good_friend();
	
	void visit();
	
private:
	home *h;
};

//类外写成员函数
home::home()
{
	my_sittingroom = "客厅";
	my_bedroom = "卧室";
}

good_friend::good_friend()
{
	h = new home;
}

void good_friend::visit()
{
	cout << "好朋友正在访问" << h -> my_sittingroom << endl;
	cout << "好朋友正在访问" << h -> my_bedroom << endl;
}

int main(){
	good_friend g;
	g.visit();
	return 0;
}

C++类和对象——友元详解_第4张图片

4.成员函数做友元 

代码示例:

#include
using namespace std;

class home;

class good_friend
{
public:
	good_friend();
	
	void visit();
	//让visit可以访问home中的私有成员
	void visit2();
	//让visit2不可以访问home中的私有成员
	
private:
	home *h;
};

class home
{
	friend void good_friend::visit();
	//使得good_friend的成员函数visit可以访问本类的私有成员
	
public:
	home();
public:
	string my_sittingroom;
	
private:
	string my_bedroom;
};

//类外写成员函数
home::home()
{
	my_sittingroom = "客厅";
	my_bedroom = "卧室";
}

good_friend::good_friend()
{
	h = new home;
}

void good_friend::visit()
{
	cout << "好朋友正在访问" << h -> my_sittingroom << endl;
	
	cout << "好朋友正在访问" << h -> my_bedroom << endl;
}

void good_friend::visit2()
{
	cout << "好朋友正在访问" << h -> my_sittingroom << endl;
	
	//cout << "好朋友正在访问" << h -> my_bedroom << endl;
}

int main(){
	good_friend g;
	g.visit();
	g.visit2();
	return 0;
}

C++类和对象——友元详解_第5张图片

你可能感兴趣的:(c++,开发语言,友元,类和对象)