C++语言程序设计

假定我们已经定义了两个集合类变量，一个为整型数集合，另一个为实型数集合：

| 程序段10-7

class IntSet {
public:
//...
private:
int elems[maxCard];
int card;
};

class RealSet {
public:
//...
private:
float elems[maxCard];
int card;
};

我们还要定义一个函数SetToReal，其功能是将整型数集合转换为实型数集合。SetToReal可以定义为IntSet类的成员函数。

| 程序段10-8

void IntSet::SetToReal (RealSet &set)
{
set.EmptySet();
for (register i = 0; i < card; ++i)
set.AddElem((float) elems[i]);
}

这个函数中，整型数集合中的每一个元素作为实参，调用实型数集合中的AddElem成员函数的开销较大。如果我们将SetToReal函数定义为RealSet类的友元，使得SetToReal函数能够访问RealSet类的私有成员，则可提高程序运行的效率。

| 程序段10-9

class RealSet {
//...
friend void IntSet::SetToReal (RealSet&);
};

void IntSet::SetToReal (RealSet &set)
{
set.card = card;
for (register i = 0; i < card; ++i)
set.elems[i] = (float) elems[i];
}

从上面我们可以看出：定义友元需用friend关键字，SetToReal函数定义为类RealSet的友元后，就能够直接访问RealSet类的私有数据成员elems，避免了函数调用的开销，从而提高了程序运行的效率。