#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、運算符重載
優點:能夠提高效率,表達簡單、清晰;
缺點:友元函數破環了封裝機制,儘量不使用成員函數,除非不得已的情況下才使用友元函數;
注意點:友元函數不能繼承;