读书人

[讨论]什么时候该用友元函数解决思路

发布时间: 2012-03-30 17:32:10 作者: rapoo

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

[解决办法]
尽量不要用。
[解决办法]
C++中最强耦合性的方式了. 不到山穷水尽不要用.

最有可能的是在重载 operator < < 的时候. 但, 一旦你的接口足以满足operator < <你就不应该用.
[解决办法]
如果是继承的情况下,

想共享数据,

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

子类便可以访问它.


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

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

有两种方法,

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

但这种情况下,

除非返回的是引用,

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

另一种就是用友元了,

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

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

但友元破坏了封装性,

不得已的情况下不要使用.
[解决办法]
正如楼上所说,使用友元函数会在一定程度上破坏类的封装性.但是有些情况下为了解决特定的问题,不得不使用友元.如重载操作符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的成员函数.
[解决办法]
ding~


[解决办法]
overload operator
[解决办法]
我还没主动用过
[解决办法]
没有办法的时候才用

读书人网 >C++

热点推荐