c++之友元函数和友元类

什么是友元?

友元就是朋友,c++中为了方便访问某个类的私有成员,引入了友元的概念
友元用 “friend” 定义

友元函数

友元函数分为两种

  • 友元全局函数
  • 友元成员函数
友元全局函数
class Coordinate
{
	friend void printXY(Coordinate &c);
publuc:
	Coordinate(int x,int y){...}//这里省略赋值内容
private:
	int x;
	int y;
};
//全局定义
void printXY(Coordinate &c)
{
	//直接访问私有成员
	cout<<c.x<<c.y<<endl;
}

int main()
{
	Coordinate coor(1,2);
	printXY(coor);//当作全局函数调用
	return 0;
}
友元成员函数
//这里不写Coordinate类,和上面相同
class Coordinate
{
	//这里说明了这个函数是Circle的成员函数
	friend void Circle::printXY(Coordinate &c);
publuc:
	Coordinate(int x,int y){...}//这里省略赋值内容
private:
	int x;
	int y;
};

class Circle
{
public:
	void printXY(Coordinate &c)
	{
		cout<<c.x<<c.y<<endl;
	}
};

int main()
{
	Cooridnate coor(1,2);
	Circle circle;

	//注意这里与全局的不同
	circle.printXY(coor);
	return 0;
}

友元类

友元类可以让一个类访问另一个类的私有数据

这里举单链表的例子

//先声明一下LinkList,防止Node找不到,我用的是CLion,没有提前声明
class LinkList;
class Node
{
private:
	int data;
	Node *next;
public:
	Node();//这里省略构造析构,实际中要写
	friend class LinkList	;//友元类
};

class LinkList
{
private:
	Node *head;//节点
public:
	...//省略
};

注意:

  • 友元关系不可以传递
  • 友元是单向的

特别提醒:友元只是封装的补充,不要用太多,破坏了封装性

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值