友元施用的困扰

友元使用的困扰自学c++到类的友元,发现一个问题。在一个类中,有个判断是不是闰年的函数,constboolDate::isl

友元使用的困扰
自学c++到类的友元,发现一个问题。在一个类中,有个判断是不是闰年的函数,
constboolDate::isleapyear()
{
         if(year%4==0) return 1;
         elsereturn 0;
}
在一个二维空间点坐标的类中,
friend Point add(const Point &a,const Point&b)。两个比较,都用到了私有的数据成员,year和a.x+b.x的x,友元什么时候用?到底什么叫“进行私有数据访问”? c++ 友元
[解决办法]
“进行私有数据访问”就是访问声明成private的数据成员

友元解决了私有数据的访问权限的问题
private数据只能由类的成员函数进行访问,但有可能需要被某个类外的函数进行访问,这时将这个类外的函数声明成友元就可以访问了。

友元只有在特殊的情况下才用,尽量不要用,会破坏类的封装。
[解决办法]
一般我们写一个类 肯定基本上都是 变量私有,有的也叫 属性私有  这种把属性私有化 叫做封装。为什么呢? 你想啊 你辛辛苦苦写一个类 给大家用  如果是 public 完全公开了  那么谁都有可能 改你的变量。 变量的修改可能导致你下面的 函数出错,你用这个类创建对象也会出错。 所以我们要私有   但是我们要用这些 属性啊 。怎么办呢 ?就只能拷贝一份 让我们拿去用   一般JAVA中 用 get()  set() 函数  return 一份副本拿回去给你用  这样可以保证 你的 类不会有 被改动的 损伤。 友元 这个 是C++独有的  什么意思呢? 就是说 你声明的 友元函数 是这个类里面的成员 ,在这个类里 如果你声明了友元函数 那么你可以 到这个类的外面去 定义实现 这个函数。在这个函数中你可以 使用 这个类里面所有的东西 就和 你定义在这个类里的 函数一样 。不知道 你懂了没
[解决办法]
而且 一般友元是没必要用的,你知道就行 我给你个 例子 你一看就明白了 
class A{
 privte:
int a=0;//这个就是封装。

public:
int geta(){
   return a;//这个就是副本
}
void seta(int a){
this->a=a;//这个是修改a的值。
}
friend void sum();
};
在类外面你可以实现你的 友元sum();并且在 sum中你可以 使用 int a这个变量。而没有友元的函数式不可以使用 封装的 a 的。
[解决办法]
如果是对象自身调用operator重载,可以不使用友元,因为是对象自身,所以在函数体内可以访问对象的所有成员,但是如果是其他对象调用,如重载operator<<,因为是ostream对象来调用,由于访问保护,ostream对象不能访问私有数据,所以要使用友元,才能完成
我也是C++刚起步,以上是我的愚见,希望能够lz提供一个思路