45 C++ 友元

本文详细介绍了C++中的友元机制,包括全局函数、类和成员函数作为友元的三种实现方式。友元允许非成员函数或类访问其他类的私有和保护成员,以实现特定的访问需求。通过示例代码展示了如何声明和使用友元,以实现类间更灵活的数据访问控制。
摘要由CSDN通过智能技术生成

在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术

友元的目的就是让一个函数或者类 访问另一个类中私有成员

友元的关键字为 friend

友元的三种实现

  • 全局函数做友元

  • 类做友元

  • 成员函数做友元

#include"cf_13.h"

class Home;
class VisitorsA;
class VisitorsB
{
public:
	VisitorsB();
	
	~VisitorsB() {}
	void visit02();

private:
	Home* home_02;

};
class Home
{
	// 告诉编译器 visitors全局函数 是 Home类的好朋友,可以访问类中的私有内容
	friend void visitors(Home* obj);
	// 类友元
	friend class VisitorsA;
	// 成员函数友元
	friend void VisitorsB::visit02();
public:
	Home()
	{
		this->settingRoom = "客厅";
		this->bedroom = "睡房";
	}
	~Home() {}
	string settingRoom;

private:
	string bedroom; // 范围私有属性,需要友元
};

// 全局函数通过友元访问类的私有函数
void visitors(Home* obj)
{
	cout <<"全局函数正访问客厅:" << obj->settingRoom << endl;
	cout <<"全局正访问睡房:" << obj->bedroom << endl;
}

class VisitorsA
{
public:
	VisitorsA(){}
	~VisitorsA() {}
	void visit(Home* obj)
	{
		cout << "类友元访问客厅:" << obj->settingRoom << endl;
		cout << "类友元访问睡房:" << obj->bedroom << endl;
	}
};

// 一定要注意顺序,VisitorsB要写类外函数
VisitorsB::VisitorsB()
{
	home_02 = new Home;
}
void VisitorsB::visit02()
{
	cout << "成员函数友元访问客厅:" << home_02->settingRoom << endl;
	cout << "成员函数友元访问睡房:" << home_02->bedroom << endl;
}


void cf_13_test_01()
{
	Home home_01;
	visitors(&home_01);// 全局函数访问
	VisitorsA va1;
	va1.visit(&home_01);// 类友元访问
	VisitorsB va2;
	va2.visit02();// 成员函数友元访问
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值