栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++——友元

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++——友元

友元顾名思义就是类似于现实中的朋友的概念。举个例子比如带人回家做客,我们会首先带他去客厅,一般情况下是不会带人进卧室的。但是自己要好的朋友来家里玩就不一样了,不止可以带好朋友进客厅也可以进自己的卧室。

类似的,在类中有私有成员,公共成员。一般情况下类外是不能访问到私有成员的,这个私有成员就类似于上面例子中的卧室。那在不一般的情况下,我们怎样才能访问类中的私有成员呢?下面开始介绍:

友元

目的: 让一个函数或者类可以访问另一个类中的私有成员。

实现方法:

1. 全局函数做友元 (全局函数可以访问类中的私有成员)

#include
using namespace std;

class Building
{

 friend	void goodfriend(Building* b);   //引入友元!!!
public:
	string settingroom;//客厅
	Building();//构造函数
private:
	string bedroom;//卧室
};
Building::Building()
{
	settingroom = "客厅";
	bedroom = "卧室";
}
void goodfriend(Building* b)
{
	cout << "进" << b->settingroom << endl;//进客厅
	cout << "进" << b->bedroom << endl;//进卧室
}
int main()
{
	Building b;
	goodfriend(&b);
}

全局函数在不做友元的时候是不能访问类的私有成员,在类中加上声明友元后就可以访问。

格式: friend 函数名();

2.类做友元 (一个类能访问另一个类的私有成员)

#include
using namespace std;

class Building
{
	friend class GoodFriend;
public:
	string settingroom;//客厅
	Building();//构造函数
private:
	string bedroom;//卧室
};
Building::Building()
{
	settingroom = "客厅";
	bedroom = "卧室";
}
class GoodFriend
{
public:
	void visit(Building* b);

};
void GoodFriend::visit(Building* b)
{
	cout << "进" << b->settingroom << endl;//进客厅
	cout << "进" << b->bedroom << endl;//进卧室
}
int main()
{
	Building b;
	GoodFriend g;
	g.visit(&b);
}

类在不做友元的时候是不能访问另一个类的私有成员,在类中加上声明友元后就可以访问。

格式: friend class 类名;

3. 成员函数做友元 (一个类中的某个成员函数访问另一个类的私有成员)

#include
using namespace std;
class Building;
class GoodFriend
{
public:
	GoodFriend();
	void visit1();
	void visit2();

	Building* b;
};
class Building
{
	friend void GoodFriend::visit2();
public:
	string settingroom;//客厅
	Building();//构造函数
private:
	string bedroom;//卧室
};
Building::Building()
{
	settingroom = "客厅";
	bedroom = "卧室";
}
GoodFriend::GoodFriend()
{
	b = new Building;//创建
}

void GoodFriend::visit2()
{
	cout << "进" << b->settingroom << endl;//进客厅
	cout << "进" << b->bedroom << endl;//进客厅
}
int main()
{
	//Building b;
	GoodFriend g;
	g.visit2();
}

格式: friend 返回值类型 类名::方法名();

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353183.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号