C++友元

友元

在程序里,有些私有属性,但是想让类外特殊的一些函数或者类型进行访问,就需要用到友元。
所以,友元就是让一个函数或者类作为另一个类的(朋友),来访问该类的私有成员。

关键字 friend

友元的三种实现:
1 全局函数做友元
2 类做友元
3 成员函数做友元

1 全局函数做友元
在这里插入图片描述
此时在类中 此处加上 如图
在这里插入图片描述
在这里插入图片描述

2 类做友元
(此处使用了构造函数的类外表示)

//个人空间类
class Building;
//好朋友类
class goodFriend
{
public:
	goodFriend();
	void visit();//访问Building中的属性
private:
	Building* building;
};
//建筑物类
class Building
{
	//goodFriend是本类的firend 可以访问私有成员
	friend class goodFriend;  //关键语句
public:
	Building();//构造函数的类外表示
public:
	string m_SittingRoom;

private:
	string m_BedRoom;
};

Building::Building()//Building构造函数的类外表示
{
		m_SittingRoom = "客厅";
		m_BedRoom = "卧室";
}

goodFriend::goodFriend()//goodFriend构造函数的类外表示
{
	//创建一个建筑物的对象
	building = new Building;//堆区创建对象
	//让building指向该对象
}
void goodFriend::visit()
{
	cout << "好朋友正在访问:" << building->m_SittingRoom << endl;
	cout << "好朋友正在访问:" << building->m_BedRoom << endl;
}

void test01()
{
	goodFriend gf;
	gf.visit();
}
int main()
{
	test01();
	system("pause");
	return 0;
}

在这里插入图片描述

  1. 成员函数做友元
class Building;
class GoodFriend
{
public:
	GoodFriend();//构造函数
	void visit();//访问Building的私有内容
	void visit2();//不可访问Building的私有成员

	Building* building; //维护building指针
};

class Building
{
	//告诉编译器 GoodFriend类下的visit成员函数
	//作为本类的friend 可以访问私有成员
	friend void GoodFriend::visit();
	friend void GoodFriend::visit2();
public:
	Building();
public:
	string m_SittingRoom;
private:
	string m_BedRoom;
};
Building::Building()
{
	m_SittingRoom = "客厅";
	m_BedRoom = "卧室";
}
GoodFriend::GoodFriend() 
{
	building = new Building;
//new(创建)Building对象在堆区,
//且用指针buiding维护Building
}
void GoodFriend::visit()
{
	cout << "visit函数正在访问"<<building->m_SittingRoom << endl;
}
void GoodFriend::visit2()
{
	cout << "visit2函数正在访问" << building->m_SittingRoom << endl;
	cout << "visit2函数正在访问" << building->m_BedRoom << endl;
}
void test01()
{
	GoodFriend gf;
	gf.visit();
	gf.visit2();
}

int main()
{
	test01();
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值