两个类互相含有对方的友元成员函数?
class X {
funcx(Y*); //函数定义,需要访问Y的私有成员
};
class Y {
friend X::funcx(Y*); //友元授权
}
class Y中的友元授权要放在class X后面,也就是先定义完class X再定义class Y,
class Y { }内容不能放在class X之前。那么如何在class Y中定义访问X私有成员的函数,并在class X中友元授权呢?两个类的先后顺序决定了只能后一个类包含前一个类的友元成员函数,而不能反过来,除非前一个类X中friend class Y; 把整个类Y都设为友元。
class X;
class Y;
class X {
private:
int x_value;
public:
int funcx(Y* yp); //同时访问X、Y的私有成员,X作为this指针
//friend int Y::funcy(X* xp); 失败,两类先后顺序问题,只能friend class X
};
class Y {
private:
int y_value;
public:
int funcy(X* xp); //同时访问X、Y的私有成员,但无权访问X的私有成员
friend int X::funcx(Y* yp); //友元授权
};
如果友元成员函数对两个类的先后顺序有要求,那么如何同时让两个类都含有对方的友元函数授权呢?