首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C++之友元函数

C++之友元函数

作者头像
zy010101
发布2020-04-08 16:41:16
发布2020-04-08 16:41:16
5270
举报
文章被收录于专栏:程序员程序员

友元函数提供了一种类外访问类的私有成员的方式。这种方式很明显破坏了类的封装性。但是有时候我们确实有这种需求。为此C++就提供了友元函数和友元类。本文说明的是友元函数。

需要强调的是,友元函数不是类的函数,我们只是在类内做了一个声明,表示这个函数是该类的友元函数。既然友元函数不是该类的成员函数,那么理所当然的不具备this指针,不能被子类继承。

友元函数实际上就像隔壁老王在你家开了个后门(而且是经过你允许的)。

友元函数的声明非常简单,因为它不是类的成员,你可以在类内的任何地方声明它。语法格式如下:

代码语言:javascript
复制
friend 返回值 函数名(参数列表);

下面我们来看一个例子:

代码语言:javascript
复制
#include<iostream>


class CMan
{
friend void LaoWang(CMan& p);		//友元函数

private:
	int a;
	int b;
public:
	CMan(int a = 0, int b = 0);
	void showMan();
};

void LaoWang(CMan& p);            //声明函数LaoWang

CMan::CMan(int a, int b)
{
	this->a = a;
	this->b = b;
}

void CMan::showMan()
{
	std::cout << "a:" << this->a << "     b:" << this->b << std::endl;
}

void LaoWang(CMan &p)
{
	p.a = 80;
	p.b = 50;
}

int main()
{
	CMan man(100, 100);
	man.showMan();

	LaoWang(man);

	man.showMan();

	return 0;
}

调用结果如下:

可以看到,类的私有属性成员被更改了值。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档