c++中类的友元

c++中类的友元,第1张

//友元
//当在类中确定这个变量为友元时就可以让它进行访问私有变量
//友元的目的就是让一个或者一个类访问另一个类中的私有成员
//友元的关键词为friend
//友元的三种实现
//这里先来看第一种 全局函数做友元
#include
#include
using namespace std;
class building
{	//goodgay是building的好朋友,可以进行访问私有成员
	friend void goodgay(building*building1);//定义为友元,则可以进行私有的访问
public:
	building()//无参构造函数
	{
		m_sittingroom = "客厅";
		m_bedroom = "卧室";
	}
	string m_sittingroom;//客厅
private:
	string m_bedroom;//卧室
};
void goodgay(building*building1)//指针接收
{
	cout << "好朋友全局函数正在进行访问:" << building1->m_sittingroom << endl;
	cout << "好朋友全局函数正在进行访问:" << building1->m_bedroom <
#include
using namespace std;
class Building;//先进行声名一下我待会会写building这个类,你先不要进行报错
class goodgay
{
public:
	void visit();//参观函数,访问building中的属性
	Building*building;//building类型的指针
	goodgay();//类外使用,类内声名
};
class Building
{
	friend class goodgay;//这里加上友元就可以进行访问
public:
	string m_sittingroom;//客厅
	Building();//类外使用,类内声名
private:
	string m_bedroom;//卧室
};
//进行类外写成员函数
Building::Building()
{
	
	m_sittingroom = "客厅";
	m_bedroom = "卧室";
}
goodgay::goodgay()
{
	//创建建筑物类型的对象
	building = new Building;
}
void goodgay::visit()
{
	cout << "好朋友正在进行访问:" << building->m_sittingroom << endl;
	cout << "好朋友正在进行访问:" << building->m_bedroom << endl;//若此时不是友元则不能进行访问,要是把它设置成友元则可以进行访问
}
int main()
{
	goodgay gg;
	gg.visit();
	return 0;
}



//成员函数做友元
#include
#include
using namespace std;
class Building;//先进行声名,防止后面报错 
class goodgay
{
public:
	goodgay();
	void visit();//让它可以进行访问building中的私有成员
	void visit2();//让它不可以进行访问building中的私有成员
	Building *building;
};
class Building
{
	friend void goodgay::visit();//告诉编译器goodgay类中的visit是本类的好朋友,可以进行访问私有变量
public:
	Building();
	string m_sittingroom;//客厅
private:
	string m_bedroom;//卧室
};
//类外实现成员函数
Building::Building()
{
	m_sittingroom = "客厅";
	m_bedroom = "卧室";
}
goodgay::goodgay()
{
	building = new Building;//开辟空间
}
void goodgay::visit()//可以进行访问私有变量
{
	cout << "visit正在进行访问" << building->m_sittingroom << endl;
	cout << "visit正在进行访问" << building->m_bedroom << endl;
}
void goodgay::visit2()//不可以进行访问私有变量,因为他不是Building类中的好朋友
{
	cout << "visit2正在进行访问" << building->m_sittingroom << endl;
	//cout << "visit2正在进行访问" << building->m_bedroom << endl;
}
int main()
{
	goodgay gg;
	gg.visit();
	gg.visit2();
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/673276.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存