C++ 类友元和成员函数友元

本文深入探讨了C++中的类友元概念,包括如何使一个类能够访问另一个类的私有成员,以及如何将特定成员函数声明为友元,以实现对其他类私有成员的访问。通过具体代码示例,详细讲解了友元类和友元函数的使用方法。
#include <iostream>
#include <string>
using namespace std;


/************************************************************************

类友元
访问其他类的私有属性,需要声明为该类的友元

成员函数友元
若不想类友元,只想单独类中的某个成员函数访问其他类的私有成员,可以将成员函数设置为其他类的成员函数友元
/************************************************************************/

//先声明Building类,表明该类存在
class Building;
class GoodFriend{
public:
	//类中声明,类外实现
	GoodFriend();
	void friend_visit();
	~GoodFriend();

private:
	Building *m_pbld;//若想访问其他类成员,需要声明一个类对象作为成员

};


class Building
{
	//1.声明GoodFriend是Building的朋友,可以访问该类的私有数据成员;
	friend class GoodFriend;
	//2. (先注释掉类友元声明)告诉编译器GoodFriend下的friend_visit()函数作为本类的朋友,可以访问本类的私有成员
	friend void GoodFriend::friend_visit();
public:
	Building();
	string m_sitting_room;
private:
	string m_bed_room;
};
//函数类内声明,类外实现
Building::Building()
{
	m_sitting_room="客厅";
	m_bed_room  = "卧室";
}

//加上GoodFriend类作用域,函数实现需要写在Building构造函数之后,因为new Building会调用构造函数,不然找不到实现;
GoodFriend::GoodFriend()
{
	m_pbld = new Building;//调用构造函数
}

//析构
GoodFriend::~GoodFriend()
{
	if(m_pbld != NULL)
	{
		delete m_pbld;
	}
}

void GoodFriend::friend_visit()
{
	cout<<"sitting_room:"<<m_pbld->m_sitting_room<<endl;
	cout<<"bed_room:"<<m_pbld->m_bed_room<<endl;
	
}

void test1()
{
	GoodFriend gf;
	gf.friend_visit();

}

int main()
{

	test1();

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值