——能够访问类的私有成员的非成员函数
创建友元:
将其原型放在类声明中,并在原型声明前加上关键字friend
friend Time operator *(double m, const Time &t); // goes in class declaration
- operator*()函数不是成员函数,因此不能使用成员运算符调用
- 访问权限与成员函数相同
Time operator *(double ml, const Time &t) // friend not used in definition { ... }
只有在类声明中的原型中才能使用friend。除非函数定义也是原型,否则不能在函数定义中使用该关键字
友元是否有悖于OOP:
只有类声明可以决定哪一个函数是友元,因此类声明仍然控制了哪些函数可以访问私有数据。总之,类方法和友元只是表达类接口的两种不同的机制