C++友元

本文介绍了友元的概念,如何通过全局函数、类和成员函数实现对类私有属性的访问,以及不同方式下友元的使用场景和权限控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

友元的定义

类的私有属性,也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术
目的让一个函数或者类访问一个类中私有成员
关键字friend

例如,你的家里有客厅(public),卧室(private),客厅所有的客人都可以进去,但是卧室是私有的只有自己可以进去,但是,你也允许你的好闺蜜好基友一起进去

友元的三种实现

全局函数做友元

class Building
{public : Building():SittingRoom("客厅"),BedRoom("卧室")
		string SittingRoom;
private : string BedRoom;

};

void goodGay(Building *building)
{
	cout<<"好基友全局函数正在访问"<<Building->m_sittingRoom;
	cout<<"好基友全局函数正在访问"<<Building->m_BedRoom;//报错,因为访问了私有属性
}

想要全局函数也访问私有属性,只需要在类内最上面以friend声明允许访问的全局函数即可,将上面的错误代码进行修改,得到下面的代码

class Building
{
friend void goodGay(Building *building);
public : Building():SittingRoom("客厅"),BedRoom("卧室")
		string SittingRoom;
private : string BedRoom;

};

void goodGay(Building *building)
{
	cout<<"好基友全局函数正在访问"<<Building->m_sittingRoom;
	cout<<"好基友全局函数正在访问"<<Building->m_BedRoom;//报错,因为访问了私有属性
}

可以看到,在类的最上面加上friend void goodGay(Building *building);,说明goodGay是我的好朋友,可以访问我的私有成员

类做友元

让一个类也可以访问另一个类的私有内容

class Building
{

public : Building():SittingRoom("客厅"),BedRoom("卧室")
		string SittingRoom;
private : string BedRoom;

};
class GoodGay{

public : void visit();//参观函数,访问下方的building的私有属性
GoodGay():building(new Building())
void visit()
{
		cout<<"好基友全局函数正在访问"<<this->building->m_sittingRoom;
	cout<<"好基友全局函数正在访问"<<this->uilding->m_BedRoom;//报错
Building * building;
}

想要goodgay类做友元,只需要声明他是一个友元类即可,在building类中加添friend class Goodgay;

class Building
{
friend class Goodgay;
public : Building():SittingRoom("客厅"),BedRoom("卧室")
		string SittingRoom;
private : string BedRoom;

};
class GoodGay{

public : void visit();//参观函数,访问下方的building的私有属性
GoodGay():building(new Building())
void visit()
{
		cout<<"好基友全局函数正在访问"<<this->building->m_sittingRoom;
	cout<<"好基友全局函数正在访问"<<this->uilding->m_BedRoom;
Building * building;
}

成员函数做友元

在上面的场景中,假设我的goodgay函数里有两个函数visit1()和visit2(),我现在只想让visit1()可以访问私有属性,不想让visit2()访问私有属性,应该怎么办
我们需要用friend声明对应作用域下的某个函数
比如 friend void GoodGay::visit();
即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值