[讨论]什么时候该用友元函数

Dugowe 2007-04-20 04:31:47
rt
...全文
509 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
做鸡真好吃 2007-09-17
  • 打赏
  • 举报
回复
Dugowe 2007-09-17
  • 打赏
  • 举报
回复
谢谢各位了
coldplay968 2007-04-21
  • 打赏
  • 举报
回复
没有办法的时候才用
小一郎 2007-04-21
  • 打赏
  • 举报
回复
我还没主动用过
飞哥 2007-04-21
  • 打赏
  • 举报
回复
overload operator
plo2168424 2007-04-21
  • 打赏
  • 举报
回复
ding~

holerescue 2007-04-20
  • 打赏
  • 举报
回复
正如楼上所说,使用友元函数会在一定程度上破坏类的封装性.但是有些情况下为了解决特定的问题,不得不使用友元.如重载操作符operator>>, operator<<.
class Member
{
int i;
public:
friend ostream& operator<<(ostream& os, const Member& m)
{
return os << "Member: " << m.i << endl;
}
}
这里二元操作符<<的第一个操作数是ostream而不是Member,因此不能简单把operator<<作为Member的成员函数.
xlbdan 2007-04-20
  • 打赏
  • 举报
回复
如果是继承的情况下,

想共享数据,

就将基类的要共享的数据成员声明为protected即可

子类便可以访问它.


而如果是两上没有共享关系的类,

想访问对方的私有成员时,

有两种方法,

一种就是定义一个共有成员函数来返回那个私有成员,

但这种情况下,

除非返回的是引用,

否则都不能对私有成员进行修改.

另一种就是用友元了,

如果类A想完全使用类B的私有成员,

那就将A声明为B的友元类.

但友元破坏了封装性,

不得已的情况下不要使用.
yutaooo 2007-04-20
  • 打赏
  • 举报
回复
C++中最强耦合性的方式了. 不到山穷水尽不要用.

最有可能的是在重载 operator << 的时候. 但, 一旦你的接口足以满足operator <<你就不应该用.
taodm 2007-04-20
  • 打赏
  • 举报
回复
尽量不要用。

65,212

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧