题目是:定义类 X . Y . Z .函数 h ( X *),满足:类 X 有私有成员 i . Y 的成员函数 g ( X *)是X的友元函数,实现对 X 的成员 i 加1。类 Z 是类 X 的友元类,其成员函数 f ( X *)实题 X 的成员 i 加5;函数 h ( X *)是 X 的友元函数,实现对 X 的成员 i 加10。在一个文件中定义和实现类,在另一个文件中实现 main 函数。
根据这篇文章可以把代码改成这样:
class X;
class Z;
class Y
{
public:
int g(X *p);
};
class X
{
public:
X(int I){i=I;}
int show(){return i;}
friend int Y::g(X* p); //需要表明是Y的成员函数,Y::g(X* p)需要在友元函数声明前就已经声明
friend class Z;
friend int h(X *p);
private:
int i;
};
int Y::g(X* p) //函数g必须在类X定义以后实现,才能对应到私有成员变量
{
p->i++;
}
class Z
{
public:
int f(X *p);
};
int Z::f(X *p)
{
p->i += 5; //i没有定义,需要通过p->i来访问,也可以写成p->i = p->i +5;
}
int h(X* p)
{
p->i += 10; //i没有定义,需要通过p->i来访问,也可以写成p->i = p->i +10;
}