一道关于类的友元的C++题目

来源:百度知道 编辑:UC知道 时间:2024/06/03 16:29:41
原题:定义类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()函数。

g(x*)是x的友元函数,却用来对自己的成员变量i累加,有必要吗?为什么不把累加的操作放在x的内部,而让这个函数作为y的友元函数呢?
如果按照原来的要求,可以写出这样的代码:
class X;
class Z;
class Y
{
public:
void g(X* px);

};

class Z
{
public:
void f(X* px);
void h(X* px);
};

class X
{
public:
friend class Z;
friend void Y::g(X* px);
friend void Z::h(X* px);

private:
int i;
};

void Y::g(X* px)
{
px->i++;
}

void Z::f(X* px)
{
px->i += 5;
}

void Z::h(X* px)
{
px->i += 10;
}
代码顺序不能颠倒!!

ls 答非所问