C++语言程序设计

嵌套友元
对于嵌套类，也不能访问私有成员。嵌套类要访问私有成员也必须定义为友元。请看下面的例子：

| 例10-26

#define SZ 20
class holder
{
private:
int a[SZ];
public:
void initialize();
class pointer
{
private:
holder *h;
int* p;
public:
void initialize(holder* H);
//move around in the array.
void next();
void previous();
void top();
void end();
//access values.
int read();
void set(int i);
};
friend holder::pointer;
};

类holder包含一个整型数组和一个嵌套类pointer。通过定义pointer为holder的友元，使得pointer成员可以访问holder类的私有成员：
friend holder : :pointer ;

关于友元的使用
如果一个函数被某一个类声明为friend，就意味着它不是这个类的成员函数，但却可以访问该类的私有成员，而且它必须被列在类的定义中。虽然友元这种机制为我们进行程序设计提供了一定的方便性，但是，面向对象的程序设计要求类的接口与类的实现分开，对对象的访问通过其接口函数进行。如果直接访问对象的私有成员，就破坏了面向对象程序的信息隐藏和封装特性，虽然提供了一些方便，但有可能是得不偿失的，所以，我们要慎用友元。