c++友元函数的主要用法

@TOC今天记录的是c++中的友元函数的主要用法,话不多说,直接看正文!

一、全局函数做友元

#include <iostream>
using namespace std;
#include <string>
//首先定义一个Building类
class Building
{
friend void gooodFriend(Building &Build);
//对全局函数进行friend表示,这就可以进行访问了
public:
	//构造函数对其元素进行赋值
	Building()
	{
		sittingRoom="客厅";
		bedRoom="卧室";
	}
	//里面有两个元素:卧室和客厅
public:
	string sittingRoom;
private:
	string bedRoom;
};
//创建一个全局函数
void gooodFriend(Building &Build)//传入的是Building的类,以引用的方式接收
{
	cout<<"gooodFriend 全局函数正在访问"<<Build.sittingRoom<<endl;
	//要访问里面的私有变量
	cout<<"gooodFriend 全局函数正在访问"<<Build.bedRoom<<endl;
	//显然这个是行不通的,要想访问到怎么办呢?
}
void test01()
{
//创建一个Building的对象
	Building Build;
	gooodFriend(Build);
}

int main()
{
	test01();
	
	system("pause");
	return 0;
}

执行结果

二、类做友元

#include <iostream>
using namespace std;
#include <string>

//创建一个friend的类
class Building;
class goodfriend
{
public:
	//创建一个构造函数
	goodfriend();
	//创建了一个visit的成员函数,希望成员函数可以访问Building的私有成员内容
	void visit();
	void visit2();//访问不到Building的私有内容
				  //Building类作为friend类的成员
private:
	Building *building;
	//相当于int m_A; int对应的是Building,m_A对应的是*building;
};
class Building
{
	friend class goodfriend;
public:
	Building();
	//
public:
	string sittingRoom;
private:
	string bedRoom;
};

Building::Building()
{
	sittingRoom = "客厅";
	bedRoom = "卧室";
}
goodfriend::goodfriend()
{
	//创建一个building的对象,
	building = new Building ;//返回的是指针,而上面定义的就是 Buildind *building
}
void goodfriend::visit()
{
	cout << "goodfriend中的visit正在访问" << building->sittingRoom << endl;
	cout << "goodfriend中的visit正在访问" << building->bedRoom << endl;
}
void goodfriend::visit2()
{
	cout << "goodfriend中的visit2正在访问" << building->sittingRoom << endl;
}
void test01()
{
	//创建一个goodFriend的对象
	goodfriend goodfriend1;
	goodfriend1.visit();
	goodfriend1.visit2();
	
}
int main()
{
	test01();
	system("pause");
	return 0;
}

三、成员函数做友元

#include <iostream>
using namespace std;
#include <string>

//创建一个friend的类
class Building;
class goodfriend
{
public:
	//创建一个构造函数
	goodfriend();
	//创建了一个visit的成员函数,希望成员函数可以访问Building的私有成员内容
	void visit();
	void visit2();//访问不到Building的私有内容
				  //Building类作为friend类的成员
private:
	Building *building;
	//相当于int m_A; int对应的是Building,m_A对应的是*building;
};
class Building
{
	friend void goodfriend::visit();
public:
	Building();
	//
public:
	string sittingRoom;
private:
	string bedRoom;
};

Building::Building()
{
	sittingRoom = "客厅";
	bedRoom = "卧室";
}
goodfriend::goodfriend()
{
	//创建一个building的对象,
	building = new Building ;//返回的是指针,而上面定义的就是 Buildind *building
}
void goodfriend::visit()
{
	cout << "goodfriend中的visit正在访问" << building->sittingRoom << endl;
	cout << "goodfriend中的visit正在访问" << building->bedRoom << endl;
}
void goodfriend::visit2()
{
	cout << "goodfriend中的visit2正在访问" << building->sittingRoom << endl;
}
void test01()
{
	//创建一个goodFriend的对象
	goodfriend goodfriend1;
	goodfriend1.visit();
	goodfriend1.visit2();
	
}
int main()
{
	test01();
	system("pause");
	return 0;
}
//这样goodfriend中的visit可以访问到Building的私有成员和公共成员,而visit2只能访问Building中的公共成员

在这里插入图片描述
总结:友元函数的主要用法一般有全局函数做友元,这时全局函数就可以直接访问到所要访问的类的所有成员,包括私有成员。
其次是类做友元,比如例子中一共有两个类goodfriend 类和Building类,其中若goodfriend类做为Building类的友元的话,那么goodfriend的所有成员函数都可以对其进行访问,注意这与下面的成员函数做友元是有相似之处。
成员函数做友元,即某个成员函数作为友元可以访问到某一类的所有成员,而不是友元成员函数只能访问到公共成员,所以连个有包含和被包含的关系。这就是我的理解,哈哈。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值