c++中的友元
友元:
友元可以访问与其有好友关系的类中的私有成员------有限制的共享。
友元包括友元函数和友元类:
友元函数:
如果在本类以外的其他地方定义的函数,在类中用friend进行声明,此函数
就称为本类的友元函数,友元函数可以访问这个类中的私有成员,当然也就是所有成员。
友元类:
类A将另一个类B声明为其友元类,友元类B中的所有函数都是A类的友元函数,
可以访问A类中的所有成员。
友元成员函数--------另一个类中的成员函数作友元
对于上面的代码来说,一开始的时候一定要对Date类进行提前引用声明,否则的话,Time类中的Date就不能被解析;
Time::display是Date类的friend函数;Time::display不是Date的成员函数,但可以引用Date中的私有成员;
需要注意的是,Time::display函数的定义一定要写在Date类之后,否则的话函数中的d.year不能被解析。
综上可知,友元函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数。
一个函数(包括普通函数和成员函数)可以被多个类声明为“朋友”,这样就可以引用多个类中的私有数据。
友元的性质和利用:
友元的关系是单向的而不是双向的。例如:
友元的关系不能传递。
除非确有必要,一般并不把整个类声明为友元类。
友元的劣势为对封装原则的破坏,不利于信息隐藏。
注意:大多数问题用公共成员函数可以解决,但有些问题,比如运算符重载问题,必须靠友元机制。