#include <iostream>
#include <vector>
#include <assert.h>
using namespace std;
class A;
class C
{
public:
int getA(A a);
};
class A
{
public:
int a;
A()
:a(10),b(11) {}
private:
int b;
int getA() {return a;}
friend class B;
friend int C::getA(A a);
};
class B
{
public:
int getA(A a) {return a.getA();}
int getB(A a) {return a.b;}
};
int C::getA(A a) {return a.b;}
int main()
{
A a;
B b;
C c;
cout << b.getA(a) << endl;
cout << b.getB(a) << endl;
cout << c.getA(a) << endl;
return 0;
}
如上为使用友元类和友元函数的例子。
使用场景:
1、类之间数据共享
2、运算符重载
优点:能够提高效率,表达简单、清晰;
缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用友元函数;
注意点:友元函数不能继承;