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

目录

1.友元是什么

2.全局函数做友元 

3.友元类 

类外写成员函数

4.成员函数做友元 

1.友元是什么

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

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

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

友元的关键字为 friend

2.全局函数做友元 

代码示例:

#include<bits/stdc++.h>
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;
}

3.友元类 

类外写成员函数

代码示例:

#include<bits/stdc++.h>
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;
}

4.成员函数做友元 

代码示例:

#include<bits/stdc++.h>
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;
}

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柏箱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值