看c++ primer 友元的部分的时候,p397,遇到这样的问题,就是类A 以另一个类B的成员函数F作为友元,但是这个成员函数F又用到了类A的私有变量,这个问题主要是怎么写类的相关代码的顺序来解决可能遇到的编译不通过的问题。
代码如下:
#include <stdio.h>
using namespace std;
class Screen;//为了relocate中的形参声明能通过
class Win_Mgr//先写Win_Mgr,因为Screen里边有一个友元函数的声明
{
public:
Win_Mgr & relocate(int r,int c,Screen &s);//具体函数实现先不写,因为函数实现里用到了Screen的私有变量,而到这里为止,只有Screen的类声明
};
class Screen
{
public:
Screen(int h,int w):height(h),width(w){}
friend Win_Mgr & Win_Mgr::relocate(int r,int c,Screen &s);
void prRes()
{
printf("%d %d\n",height,width);
}
private:
int height;
int width;
};
Win_Mgr & Win_Mgr::relocate(int r,int c,Screen &s)//最后才写函数的实现代码,它涉及到的2个类都已经写出了
{
s.height+=r;
s.width+=c;
return *this;
}
int main()
{
Screen s(2,3);
s.prRes();
Win_Mgr w;
w.relocate(1,1,s);
s.prRes();
return 0;
}