两个类互相含有对方的友元成员函数?
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); //友元授权
};
如果友元成员函数对两个类的先后顺序有要求,那么如何同时让两个类都含有对方的友元函数授权呢?
如果两个类需要互相访问私有成员,可以考虑将它们的友元成员函数定义在一个单独的全局函数中,并将这个全局函数设为两个类的友元。
具体来说,可以在两个类之外定义一个全局函数,该函数同时作为X类和Y类的友元函数,并实现对两个类私有成员的访问。例如:
class X;
class Y;
int accessXY(X* xp, Y* yp); // 定义全局函数
class X {
private:
int x_value;
public:
friend int accessXY(X* xp, Y* yp); // 将全局函数设为友元
};
class Y {
private:
int y_value;
public:
friend int accessXY(X* xp, Y* yp); // 将全局函数设为友元
};
这样,在访问X和Y私有成员时,就可以通过调用accessXY()函数来实现了。注意,在定义accessXY()函数时要考虑到X和Y类中私有成员的具体访问方式。
不知道你这个问题是否已经解决, 如果还没有解决的话: