c++中的友元

友元:

友元可以访问与其有好友关系的类中的私有成员------有限制的共享。

友元包括友元函数和友元类:

友元函数:

如果在本类以外的其他地方定义的函数,在类中用friend进行声明,此函数

就称为本类的友元函数,友元函数可以访问这个类中的私有成员,当然也就是所有成员。

友元类:

类A将另一个类B声明为其友元类,友元类B中的所有函数都是A类的友元函数,

可以访问A类中的所有成员。


友元成员函数--------另一个类中的成员函数作友元


c++中的友元

对于上面的代码来说,一开始的时候一定要对Date类进行提前引用声明,否则的话,Time类中的Date就不能被解析;

Time::display是Date类的friend函数;Time::display不是Date的成员函数,但可以引用Date中的私有成员;

需要注意的是,Time::display函数的定义一定要写在Date类之后,否则的话函数中的d.year不能被解析。


综上可知,友元函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数。


一个函数(包括普通函数和成员函数)可以被多个类声明为“朋友”,这样就可以引用多个类中的私有数据。



友元的性质和利用:

友元的关系是单向的而不是双向的。例如:

c++中的友元

友元的关系不能传递。


除非确有必要,一般并不把整个类声明为友元类。

友元的劣势为对封装原则的破坏,不利于信息隐藏。


注意:大多数问题用公共成员函数可以解决,但有些问题,比如运算符重载问题,必须靠友元机制。