#include
using namespace std;
class X;
class Y
{
public:
void g(X *p)
{
p->i+=1;
}
};
class Z
{
public:
void f(X *p)
{
p->i+=5;
}
};
class X
{
int i;
public:
X(int ii)
{
i=ii;
}
friend class Z;
friend void Y::g(X *p);
friend void h(X *p)
{
p->i+=10;
}
void show(){cout<<"i="<<i<<endl;}
};
int main()
{
X x(1);
Y y;
Z z;
h(&x);
x.show();
y.g(&x);
x.show();
z.f(&x);
x.show();
return 0;
}
using namespace std;
class X;
class Y
{
public:
void g(X* p);
};
class X
{
int i;
public:
X(int ii)
{
i = ii;
}
friend class Z;
friend void Y::g(X* p);
friend void h(X* p)
{
p->i += 10;
}
void show() { cout << "i=" << i << endl; }
};
void Y::g(X* p)
{
p->i += 1;
}
class Z
{
public:
void f(X* p)
{
p->i += 5;
}
};
int main()
{
X x(1);
Y y;
Z z;
h(&x);
x.show();
y.g(&x);
x.show();
z.f(&x);
x.show();
return 0;
}
当用到友元成员函数时,需注意友元声明和友元定义之间的相互依赖,类Y必须先定义,否则类X就不能将一个Y的函数指定为友元。然而,只有在定义了类X之后,才能定义类Y的该成员函数。更一般的讲,必须先定义包含成员函数的类,才能将成员函数设为友元。另一方面,不必预先声明类和非成员函数来将它们设为友元。